diff options
Diffstat (limited to 'src/mbgl/tile/geometry_tile_data.cpp')
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.cpp | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/src/mbgl/tile/geometry_tile_data.cpp b/src/mbgl/tile/geometry_tile_data.cpp index 91407ac1a8..bb3efeddca 100644 --- a/src/mbgl/tile/geometry_tile_data.cpp +++ b/src/mbgl/tile/geometry_tile_data.cpp @@ -173,15 +173,47 @@ static Feature::geometry_type convertGeometry(const GeometryTileFeature& geometr return Point<double>(); } -Feature convertFeature(const GeometryTileFeature& geometryTileFeature, const CanonicalTileID& tileID) { - Feature feature { convertGeometry(geometryTileFeature, tileID) }; - feature.properties = geometryTileFeature.getProperties(); - feature.id = geometryTileFeature.getID(); - return feature; +static Feature::geometry_type convertGeometryType(const GeometryTileFeature& geometryTileFeature) { + GeometryCollection geometries = geometryTileFeature.getGeometries(); + + switch (geometryTileFeature.getType()) { + case FeatureType::Unknown: { + assert(false); + return Point<double>(NAN, NAN); + } + + case FeatureType::Point: { + if(geometries.at(0).size() == 1){ + return Point<double>(); + } else { + return MultiPoint<double>(); + } + } + + case FeatureType::LineString: { + if(geometries.size() == 1){ + return LineString<double>(); + } else { + return MultiLineString<double>(); + } + } + + case FeatureType::Polygon: { + if (geometries.size() == 1) { + return Polygon<double>(); + } else { + return MultiPolygon<double>(); + } + } + } + + // Unreachable, but placate GCC. + return Point<double>(); } -Feature convertFeatureProperties(const GeometryTileFeature& geometryTileFeature) { - Feature feature { Point<double>() }; + +Feature convertFeature(const GeometryTileFeature& geometryTileFeature, const CanonicalTileID& tileID, bool isConvertGeometry) { + Feature feature { isConvertGeometry ? convertGeometry(geometryTileFeature, tileID) : convertGeometryType(geometryTileFeature)}; feature.properties = geometryTileFeature.getProperties(); feature.id = geometryTileFeature.getID(); return feature; |