diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2016-05-25 14:35:38 -0700 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2016-05-27 21:42:38 -0700 |
commit | de905ab64c34e0fd8e35603c4f4fc338d76f89b2 (patch) | |
tree | 1f7715b39159cb970d27fe852dc2a5c6f3ae8235 /platform/darwin/src/MGLPolygon.mm | |
parent | 4ab98387f1fda80b7bf9328d5aee77f37363d068 (diff) | |
download | qtlocation-mapboxgl-de905ab64c34e0fd8e35603c4f4fc338d76f89b2.tar.gz |
[ios, osx] Holes in polygons
MGLPolygon (and by extension MGLMultiPolygon) now supports interior rings. The data is preserved in feature querying results, and interior rings are respected when adding polygon overlays to the map.
Fixes #1729.
[ios, osx] Updated changelog
Diffstat (limited to 'platform/darwin/src/MGLPolygon.mm')
-rw-r--r-- | platform/darwin/src/MGLPolygon.mm | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/platform/darwin/src/MGLPolygon.mm b/platform/darwin/src/MGLPolygon.mm index 6febf6d81b..5a24cb0791 100644 --- a/platform/darwin/src/MGLPolygon.mm +++ b/platform/darwin/src/MGLPolygon.mm @@ -7,10 +7,30 @@ @dynamic overlayBounds; -+ (instancetype)polygonWithCoordinates:(CLLocationCoordinate2D *)coords - count:(NSUInteger)count -{ - return [[self alloc] initWithCoordinates:coords count:count]; ++ (instancetype)polygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count { + return [self polygonWithCoordinates:coords count:count interiorPolygons:nil]; +} + ++ (instancetype)polygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(NSArray<MGLPolygon *> *)interiorPolygons { + return [[self alloc] initWithCoordinates:coords count:count interiorPolygons:interiorPolygons]; +} + +- (instancetype)initWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(NSArray<MGLPolygon *> *)interiorPolygons { + if (self = [super initWithCoordinates:coords count:count]) { + if (interiorPolygons.count) { + _interiorPolygons = interiorPolygons; + } + } + return self; +} + +- (mbgl::AnnotationSegments)annotationSegments { + auto segments = super.annotationSegments; + for (MGLPolygon *polygon in self.interiorPolygons) { + auto interiorSegments = polygon.annotationSegments; + segments.push_back(interiorSegments.front()); + } + return segments; } - (mbgl::ShapeAnnotation::Properties)shapeAnnotationPropertiesObjectWithDelegate:(id <MGLMultiPointDelegate>)delegate { |