有人能告诉我如何在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