有人能告诉我如何在Apple地图中绘制GeoJson文件作为叠加层?我想要一个完整的例子,我有多边形或多边形的形状?
如果您为我提供了使用MKMapView渲染它的代码或库,那么这个文件Countries GeoJSON就足够了
解决方法
我找到了一个解决方案,万一有人也想要帮助.
@interface HHLViewController + (NSArray *)countriesOverlays; @end @implementation HHLViewController - (void)viewDidLoad { [super viewDidLoad]; NSArray *overlays = [HHLViewController countriesOverlays]; [self.stateMapView addOverlays:overlays]; } + (NSArray *)countriesOverlays { NSString *fileName = [[NSBundle mainBundle] pathForResource:@"countries" ofType:@"json"]; NSData *overlayData = [NSData dataWithContentsOfFile:fileName]; NSArray *countries = [[NSJSONSerialization JSONObjectWithData:overlayData options:NSJSONReadingAllowFragments error:nil] objectForKey:@"features"]; NSMutableArray *overlays = [NSMutableArray array]; for (NSDictionary *country in countries) { NSDictionary *geometry = country[@"geometry"]; if ([geometry[@"type"] isEqualToString:@"Polygon"]) { MKPolygon *polygon = [HHLViewController overlaysFromPolygons:geometry[@"coordinates"] id:country[@"properties"][@"name"]]; if (polygon) { [overlays addObject:polygon]; } } else if ([geometry[@"type"] isEqualToString:@"MultiPolygon"]){ for (NSArray *polygonData in geometry[@"coordinates"]) { MKPolygon *polygon = [HHLViewController overlaysFromPolygons:polygonData id:country[@"properties"][@"name"]]; if (polygon) { [overlays addObject:polygon]; } } } else { NSLog(@"Unsupported type: %@",geometry[@"type"]); } } return overlays; } + (MKPolygon *)overlaysFromPolygons:(NSArray *)polygons id:(NSString *)title { NSMutableArray *interiorPolygons = [NSMutableArray arrayWithCapacity:[polygons count] - 1]; for (int i = 1; i < [polygons count]; i++) { [interiorPolygons addObject:[HHLViewController polygonFromPoints:polygons[i] interiorPolygons:nil]]; } MKPolygon *overlayPolygon = [HHLViewController polygonFromPoints:polygons[0] interiorPolygons:interiorPolygons]; overlayPolygon.title = title; return overlayPolygon; } + (MKPolygon *)polygonFromPoints:(NSArray *)points interiorPolygons:(NSArray *)polygons { NSInteger numberOfCoordinates = [points count]; CLLocationCoordinate2D *polygonPoints = malloc(numberOfCoordinates * sizeof(CLLocationCoordinate2D)); NSInteger index = 0; for (NSArray *pointArray in points) { polygonPoints[index] = CLLocationCoordinate2DMake([pointArray[1] floatValue],[pointArray[0] floatValue]); index++; } MKPolygon *polygon; if (polygons) { polygon = [MKPolygon polygonWithCoordinates:polygonPoints count:numberOfCoordinates interiorPolygons:polygons]; } else { polygon = [MKPolygon polygonWithCoordinates:polygonPoints count:numberOfCoordinates]; } free(polygonPoints); return polygon; } @end