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