summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/geometry_tile_data.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/geometry_tile_data.cpp')
-rw-r--r--src/mbgl/tile/geometry_tile_data.cpp46
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;