summaryrefslogtreecommitdiff
path: root/platform/darwin/src
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src')
-rw-r--r--platform/darwin/src/MGLFeature.mm13
-rw-r--r--platform/darwin/src/MGLShapeCollectionFeature_Private.h13
-rw-r--r--platform/darwin/src/MGLShapeSource.mm12
3 files changed, 34 insertions, 4 deletions
diff --git a/platform/darwin/src/MGLFeature.mm b/platform/darwin/src/MGLFeature.mm
index c45b0bbda1..ba2ea6e605 100644
--- a/platform/darwin/src/MGLFeature.mm
+++ b/platform/darwin/src/MGLFeature.mm
@@ -1,4 +1,5 @@
#import "MGLFeature_Private.h"
+#import "MGLShapeCollectionFeature_Private.h"
#import "MGLPointAnnotation.h"
#import "MGLPolyline.h"
@@ -177,6 +178,15 @@
return mbgl::Feature{geometry};
}
+- (mbgl::FeatureCollection)mbglFeatureCollection {
+ mbgl::FeatureCollection featureCollection;
+ featureCollection.reserve(self.shapes.count);
+ for (id <MGLFeaturePrivate> feature in self.shapes) {
+ featureCollection.push_back([feature mbglFeature]);
+ }
+ return featureCollection;
+}
+
@end
/**
@@ -277,8 +287,7 @@ public:
}
MGLShape <MGLFeaturePrivate> * operator()(const mbgl::Feature &feature) const {
- GeometryEvaluator<T> evaluator;
- MGLShape <MGLFeaturePrivate> *shape = mapbox::geometry::geometry<T>::visit(feature.geometry, evaluator);
+ MGLShape <MGLFeaturePrivate> *shape = (MGLShape <MGLFeaturePrivate> *)MGLFeatureFromMBGLFeature(feature);
return shape;
}
diff --git a/platform/darwin/src/MGLShapeCollectionFeature_Private.h b/platform/darwin/src/MGLShapeCollectionFeature_Private.h
new file mode 100644
index 0000000000..4f07a93b35
--- /dev/null
+++ b/platform/darwin/src/MGLShapeCollectionFeature_Private.h
@@ -0,0 +1,13 @@
+#import "MGLFeature.h"
+
+#import <mbgl/util/feature.hpp>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MGLShapeCollectionFeature ()
+
+- (mbgl::FeatureCollection)mbglFeatureCollection;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/darwin/src/MGLShapeSource.mm b/platform/darwin/src/MGLShapeSource.mm
index 434e6fcb1b..987306a228 100644
--- a/platform/darwin/src/MGLShapeSource.mm
+++ b/platform/darwin/src/MGLShapeSource.mm
@@ -3,6 +3,7 @@
#import "MGLMapView_Private.h"
#import "MGLSource_Private.h"
#import "MGLFeature_Private.h"
+#import "MGLShapeCollectionFeature_Private.h"
#import "MGLShape_Private.h"
#import "NSURL+MGLAdditions.h"
@@ -99,8 +100,15 @@ const MGLShapeSourceOption MGLShapeSourceOptionSimplificationTolerance = @"MGLSh
source->setGeoJSON(geojson);
_shape = MGLShapeFromGeoJSON(geojson);
} else {
- const auto geojson = mbgl::GeoJSON{self.shape.geometryObject};
- source->setGeoJSON(geojson);
+ if ([self.shape isKindOfClass:[MGLShapeCollectionFeature class]]) {
+ MGLShapeCollectionFeature *feature = (MGLShapeCollectionFeature *)self.shape;
+ source->setGeoJSON(mbgl::GeoJSON{[feature mbglFeatureCollection]});
+ } else if ([self.shape conformsToProtocol:@protocol(MGLFeature)]) {
+ id<MGLFeaturePrivate> feature = (id<MGLFeaturePrivate>)self.shape;
+ source->setGeoJSON(mbgl::GeoJSON{[feature mbglFeature]});
+ } else {
+ source->setGeoJSON(mbgl::GeoJSON{self.shape.geometryObject});
+ }
}
_pendingSource = std::move(source);