summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLPolygon.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLPolygon.mm')
-rw-r--r--platform/darwin/src/MGLPolygon.mm240
1 files changed, 0 insertions, 240 deletions
diff --git a/platform/darwin/src/MGLPolygon.mm b/platform/darwin/src/MGLPolygon.mm
deleted file mode 100644
index 52bff01b20..0000000000
--- a/platform/darwin/src/MGLPolygon.mm
+++ /dev/null
@@ -1,240 +0,0 @@
-#import "MGLPolygon_Private.h"
-
-#import "MGLMultiPoint_Private.h"
-#import "MGLGeometry_Private.h"
-#import "MGLLoggingConfiguration_Private.h"
-
-#import "MGLFeature.h"
-
-#import <mbgl/util/geojson.hpp>
-#import <mapbox/polylabel.hpp>
-
-@implementation MGLPolygon
-
-@dynamic overlayBounds;
-
-+ (instancetype)polygonWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count {
- return [self polygonWithCoordinates:coords count:count interiorPolygons:nil];
-}
-
-+ (instancetype)polygonWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(NSArray<MGLPolygon *> *)interiorPolygons {
- return [[self alloc] initWithCoordinates:coords count:count interiorPolygons:interiorPolygons];
-}
-
-- (instancetype)initWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(NSArray<MGLPolygon *> *)interiorPolygons {
- MGLLogDebug(@"Initializing with %lu coordinates and %lu interiorPolygons.", (unsigned long)count, (unsigned long)interiorPolygons);
- if (self = [super initWithCoordinates:coords count:count]) {
- if (interiorPolygons.count) {
- _interiorPolygons = interiorPolygons;
- }
- }
- return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)decoder {
- MGLLogInfo(@"Initializng with coder.");
- self = [super initWithCoder:decoder];
- if (self) {
- _interiorPolygons = [decoder decodeObjectOfClass:[NSArray class] forKey:@"interiorPolygons"];
- }
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)coder {
- [super encodeWithCoder:coder];
- [coder encodeObject:self.interiorPolygons forKey:@"interiorPolygons"];
-}
-
-- (BOOL)isEqual:(id)other {
- if (self == other) return YES;
- if (![other isKindOfClass:[MGLPolygon class]]) return NO;
-
- MGLPolygon *otherPolygon = (MGLPolygon *)other;
- return ([super isEqual:otherPolygon] &&
- [[self geoJSONDictionary] isEqualToDictionary:[otherPolygon geoJSONDictionary]]);
-}
-
-- (NSUInteger)hash {
- return [super hash] + [[self geoJSONDictionary] hash];
-}
-
-- (CLLocationCoordinate2D)coordinate {
- // pole of inaccessibility
- auto poi = mapbox::polylabel([self polygon]);
-
- return MGLLocationCoordinate2DFromPoint(poi);
-}
-
-- (mbgl::LinearRing<double>)ring {
- NSUInteger count = self.pointCount;
- CLLocationCoordinate2D *coordinates = self.coordinates;
-
- mbgl::LinearRing<double> result;
- result.reserve(self.pointCount);
- for (NSUInteger i = 0; i < count; i++) {
- result.push_back(mbgl::Point<double>(coordinates[i].longitude, coordinates[i].latitude));
- }
- return result;
-}
-
-- (mbgl::Polygon<double>)polygon {
- mbgl::Polygon<double> geometry;
- geometry.push_back(self.ring);
- for (MGLPolygon *polygon in self.interiorPolygons) {
- geometry.push_back(polygon.ring);
- }
- return geometry;
-}
-
-- (mbgl::Geometry<double>)geometryObject {
- return [self polygon];
-}
-
-- (mbgl::Annotation)annotationObjectWithDelegate:(id <MGLMultiPointDelegate>)delegate {
-
- mbgl::FillAnnotation annotation { [self polygon] };
- annotation.opacity = { static_cast<float>([delegate alphaForShapeAnnotation:self]) };
- annotation.outlineColor = { [delegate strokeColorForShapeAnnotation:self] };
- annotation.color = { [delegate fillColorForPolygonAnnotation:self] };
-
- return annotation;
-}
-
-- (NSDictionary *)geoJSONDictionary {
- return @{@"type": @"Polygon",
- @"coordinates": self.mgl_coordinates};
-}
-
-- (NSArray<id> *)mgl_coordinates {
- NSMutableArray *coordinates = [NSMutableArray array];
-
- NSMutableArray *exteriorRing = [NSMutableArray array];
- for (NSUInteger index = 0; index < self.pointCount; index++) {
- CLLocationCoordinate2D coordinate = self.coordinates[index];
- [exteriorRing addObject:@[@(coordinate.longitude), @(coordinate.latitude)]];
- }
- [coordinates addObject:exteriorRing];
-
- for (MGLPolygon *interiorPolygon in self.interiorPolygons) {
- NSMutableArray *interiorRing = [NSMutableArray array];
- for (NSUInteger index = 0; index < interiorPolygon.pointCount; index++) {
- CLLocationCoordinate2D coordinate = interiorPolygon.coordinates[index];
- [interiorRing addObject:@[@(coordinate.longitude), @(coordinate.latitude)]];
- }
- [coordinates addObject:interiorRing];
- }
-
- return [coordinates copy];
-}
-
-@end
-
-@interface MGLMultiPolygon ()
-
-@property (nonatomic, copy, readwrite) NSArray<MGLPolygon *> *polygons;
-
-@end
-
-@implementation MGLMultiPolygon {
- MGLCoordinateBounds _overlayBounds;
-}
-
-@synthesize overlayBounds = _overlayBounds;
-
-+ (instancetype)multiPolygonWithPolygons:(NSArray<MGLPolygon *> *)polygons {
- return [[self alloc] initWithPolygons:polygons];
-}
-
-- (instancetype)initWithPolygons:(NSArray<MGLPolygon *> *)polygons {
- MGLLogDebug(@"Initializing with %lu polygons.", (unsigned long)polygons.count);
- if (self = [super init]) {
- _polygons = polygons;
-
- mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty();
-
- for (MGLPolygon *polygon in _polygons) {
- bounds.extend(MGLLatLngBoundsFromCoordinateBounds(polygon.overlayBounds));
- }
- _overlayBounds = MGLCoordinateBoundsFromLatLngBounds(bounds);
- }
- return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)decoder {
- MGLLogInfo(@"Initializing with coder.");
- if (self = [super initWithCoder:decoder]) {
- _polygons = [decoder decodeObjectOfClass:[NSArray class] forKey:@"polygons"];
- }
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)coder {
- [super encodeWithCoder:coder];
- [coder encodeObject:_polygons forKey:@"polygons"];
-}
-
-- (BOOL)isEqual:(id)other {
- if (self == other) return YES;
- if (![other isKindOfClass:[MGLMultiPolygon class]]) return NO;
-
- MGLMultiPolygon *otherMultiPolygon = other;
- return [super isEqual:other]
- && [self.polygons isEqualToArray:otherMultiPolygon.polygons];
-}
-
-- (NSUInteger)hash {
- NSUInteger hash = [super hash];
- for (MGLPolygon *polygon in self.polygons) {
- hash += [polygon hash];
- }
- return hash;
-}
-
-- (CLLocationCoordinate2D)coordinate {
- MGLPolygon *firstPolygon = self.polygons.firstObject;
-
- return firstPolygon.coordinate;
-}
-
-- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds {
- return MGLCoordinateBoundsIntersectsCoordinateBounds(_overlayBounds, overlayBounds);
-}
-
-- (mbgl::MultiPolygon<double>)multiPolygon {
- mbgl::MultiPolygon<double> multiPolygon;
- multiPolygon.reserve(self.polygons.count);
- for (MGLPolygon *polygon in self.polygons) {
- mbgl::Polygon<double> geometry;
- geometry.push_back(polygon.ring);
- for (MGLPolygon *interiorPolygon in polygon.interiorPolygons) {
- geometry.push_back(interiorPolygon.ring);
- }
- multiPolygon.push_back(geometry);
- }
- return multiPolygon;
-}
-
-- (mbgl::Geometry<double>)geometryObject {
- return [self multiPolygon];
-}
-
-- (NSDictionary *)geoJSONDictionary {
- NSMutableArray *coordinates = [[NSMutableArray alloc] initWithCapacity:self.polygons.count];
- for (MGLPolygonFeature *feature in self.polygons) {
- [coordinates addObject: feature.mgl_coordinates];
- }
- return @{@"type": @"MultiPolygon",
- @"coordinates": coordinates};
-}
-
-- (NSString *)description
-{
- return [NSString stringWithFormat:@"<%@: %p; title = %@, subtitle: = %@, count = %lu; bounds = %@>",
- NSStringFromClass([self class]), (void *)self,
- self.title ? [NSString stringWithFormat:@"\"%@\"", self.title] : self.title,
- self.subtitle ? [NSString stringWithFormat:@"\"%@\"", self.subtitle] : self.subtitle,
- (unsigned long)self.polygons.count,
- MGLStringFromCoordinateBounds(self.overlayBounds)];
-}
-
-@end