iOS -- 百度地图画出行政区域的边界

来源:互联网 发布:禁止网络共享 编辑:程序博客网 时间:2024/05/01 11:21
  • 获取某行政区域边界经纬度的集合
 
上边这个html文件用浏览器打开,输入地名就可以获取该地的经纬度的集合。

  • 将经纬度字符串转换成json数据
获取的经纬度集合可以算作一个字符串,想办法把这个字符串变成json数据方便我们获取,这个工作要有编辑工具实现,每组经纬度是由“;”分开的,为了方便编辑,我们先在xcode工程中把“;”替换成“],[”,

打印输出的字符串复制备用,然后在Sublime text工具编辑json字符串,编辑完成后保存为json文件。

  • 读取文件数据并依据数据画线
  将json文件拖进xcode工程中,通过读取文件数据的方式读取该文件数据,并根据百度地图API添加折线的方法画出地图边界如下图,


在合适的地方调用方法并传入相应参数(resource:文件名称,type文件类型)
- (void)readfileForResource:(NSString*)resource ofType:(NSString*)type dictionaryKey:(NSString*)key;

注意:如果遇到区域不连接,比如河北省区域,有一块区域处于北京、天津之间,而百度地图的画折线是一笔画出来的,如果只调用一次上边方法会导致有一条额外的线,所以要单独把不连接的区域经纬度列出,分两次调用上边方法。


下边附上代码:
#pragma mark -- 画出行政区域边界- (void) drawLineOfHeibeiBianjie{    ///由于边界轨迹是一笔画出来的,但是河北省比较特殊,北京天津之间有一块没有与河北其他地方接壤,所以需要分两次画    [self readfileForResource:@"hebei" ofType:@"json" dictionaryKey:@"hebei"];    [self readfileForResource:@"longfang" ofType:@"json" dictionaryKey:@"longfang"];    }- (void)readfileForResource:(NSString *)resource ofType:(NSString *)type dictionaryKey:(NSString *)key{        NSString *jsonPath = [[NSBundle mainBundle]pathForResource:resource ofType:type];    NSData *data  = [[NSData alloc]initWithContentsOfFile:jsonPath];    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];    NSArray *array = [dict objectForKey:key];    CLLocationCoordinate2D *coors = malloc([array count]*sizeof(CLLocationCoordinate2D));    NSInteger count = array.count;    for (int i = 0; i< array.count; i ++) {        coors[i].longitude =  [[array[i] firstObject] doubleValue];        coors[i].latitude = [[array [i]lastObject]doubleValue];    }    BMKPolyline *polyline = [BMKPolyline polylineWithCoordinates:coors count:count];    [_mapView addOverlay:polyline];    }////实现代理方法。设置画线的格式- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay{    if ([overlay isKindOfClass:[BMKPolyline class]]){        BMKPolylineView* polylineView = [[BMKPolylineView alloc] initWithOverlay:overlay];        polylineView.strokeColor = [[UIColor redColor] colorWithAlphaComponent:1];        polylineView.lineWidth = 1.0;                return polylineView;    }    return nil;}


0 0