Merge pull request #829 from tschaub/kml

Parse MultiGeometry in KML
This commit is contained in:
Tim Schaub
2013-06-27 06:35:50 -07:00
3 changed files with 4725 additions and 7 deletions

View File

@@ -184,24 +184,25 @@ ol.parser.KML = function(opt_options) {
var buckets = goog.array.bucket(parts, function(val) {
return val.type;
});
// homogeneous collection
var obj = {};
if (goog.object.getCount(buckets) === 1) {
// homogeneous collection
var type = goog.object.getAnyKey(buckets);
switch (type) {
case ol.geom.GeometryType.POINT:
container.geometry = {
obj.geometry = {
type: ol.geom.GeometryType.MULTIPOINT,
parts: parts
};
break;
case ol.geom.GeometryType.LINESTRING:
container.geometry = {
obj.geometry = {
type: ol.geom.GeometryType.MULTILINESTRING,
parts: parts
};
break;
case ol.geom.GeometryType.POLYGON:
container.geometry = {
obj.geometry = {
type: ol.geom.GeometryType.MULTIPOLYGON,
parts: parts
};
@@ -210,11 +211,18 @@ ol.parser.KML = function(opt_options) {
break;
}
} else {
container.geometry = {
// mixed collection
obj.geometry = {
type: ol.geom.GeometryType.GEOMETRYCOLLECTION,
parts: parts
};
}
if (goog.isArray(container)) {
// MultiGeometry nested inside another
container.push(obj.geometry);
} else {
container.geometry = obj.geometry;
}
},
'Point': function(node, container) {
var coordinates = [];
@@ -1020,7 +1028,7 @@ ol.parser.KML.prototype.createGeometry_ = function(container,
for (i = 0, ii = container.geometry.parts.length; i < ii; i++) {
coordinates.push(container.geometry.parts[i].coordinates);
}
geometry = ol.geom.MultiPoint.fromParts(coordinates, opt_vertices);
geometry = new ol.geom.MultiPoint(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTILINESTRING:
coordinates = [];
@@ -1034,7 +1042,7 @@ ol.parser.KML.prototype.createGeometry_ = function(container,
for (i = 0, ii = container.geometry.parts.length; i < ii; i++) {
coordinates.push(container.geometry.parts[i].coordinates);
}
geometry = ol.geom.MultiPolygon.fromParts(coordinates, opt_vertices);
geometry = new ol.geom.MultiPolygon(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.GEOMETRYCOLLECTION:
var geometries = [];