Implement setPolygons on ol.geom.MultiPolygon

This commit is contained in:
Bart van den Eijnden
2014-02-21 11:28:18 +01:00
parent fe159aa7fa
commit 9bade5ce87
2 changed files with 34 additions and 36 deletions

View File

@@ -777,10 +777,6 @@ ol.format.KML.readMultiGeometry_ = function(node, objectStack) {
var layout;
/** @type {Array.<number>} */
var flatCoordinates;
/** @type {Array.<number>} */
var ends;
/** @type {Array.<Array.<number>>} */
var endss;
if (type == ol.geom.GeometryType.POINT) {
var point = geometries[0];
goog.asserts.assertInstanceof(point, ol.geom.Point);
@@ -796,42 +792,12 @@ ol.format.KML.readMultiGeometry_ = function(node, objectStack) {
multiPoint.setFlatCoordinates(layout, flatCoordinates);
return multiPoint;
} else if (type == ol.geom.GeometryType.LINE_STRING) {
var lineString = geometries[0];
goog.asserts.assertInstanceof(lineString, ol.geom.LineString);
layout = lineString.getLayout();
flatCoordinates = lineString.getFlatCoordinates();
ends = [flatCoordinates.length];
for (i = 1, ii = geometries.length; i < ii; ++i) {
geometry = geometries[i];
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
goog.asserts.assert(geometry.getLayout() == layout);
goog.array.extend(flatCoordinates, geometry.getFlatCoordinates());
ends.push(flatCoordinates.length);
}
var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setFlatCoordinates(layout, flatCoordinates, ends);
multiLineString.setLineStrings(geometries);
return multiLineString;
} else if (type == ol.geom.GeometryType.POLYGON) {
var polygon = geometries[0];
goog.asserts.assertInstanceof(polygon, ol.geom.Polygon);
layout = polygon.getLayout();
flatCoordinates = polygon.getFlatCoordinates();
endss = [polygon.getEnds()];
for (i = 1, ii = geometries.length; i < ii; ++i) {
geometry = geometries[i];
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
goog.asserts.assert(geometry.getLayout() == layout);
var offset = flatCoordinates.length;
ends = geometry.getEnds();
var j, jj;
for (j = 0, jj = ends.length; j < jj; ++j) {
ends[j] += offset;
}
goog.array.extend(flatCoordinates, geometry.getFlatCoordinates());
endss.push(ends);
}
var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setFlatCoordinates(layout, flatCoordinates, endss);
multiPolygon.setPolygons(geometries);
return multiPolygon;
} else if (type == ol.geom.GeometryType.GEOMETRY_COLLECTION) {
return new ol.geom.GeometryCollection(geometries);