summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/geometry_tile_data.cpp
diff options
context:
space:
mode:
authorTobrun Van Nuland <tobrun.van.nuland@gmail.com>2017-09-14 14:03:58 +0200
committerTobrun <tobrun.van.nuland@gmail.com>2017-09-14 15:39:09 +0200
commit7702e877b2a61af33354a66d337448ef0f81b8b4 (patch)
tree37cd55170718f6001567d395c37da23ba3f55879 /src/mbgl/tile/geometry_tile_data.cpp
parenta22825e2c31286a11881880881edb86adc249be1 (diff)
downloadqtlocation-mapboxgl-upstream/9605-geometry-conversion-optional-query.tar.gz
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;