行政区划

更新日期:2020.12.25


QMSSearcherAPI提供了三个行政区划相关查询接口,封装了腾讯地图 WebService API 的行政区划查询功能,更详细的接口描述可以查阅官网。这里对 SDK 提供的行政区划查询接口做简要描述。

接口名 功能
searchWithDistrictSearchSearchOption: 根据关键词搜索行政区划
searchWithDistrictListSearchOption: 发起全国行政区域检索
searchWithDistrictChildrenSearchOption: 发起子级行政区域检索

构建行政区划搜索参数

QMSDistrictSearchSearchOption关键词检索参数

构建关键字行政区域检索参数 QMSDistrictSearchSearchOption,其中 keyword 为必填字段:

QMSDistrictSearchSearchOption *distOpt = [[QMSDistrictSearchSearchOption alloc] init];
[distOpt setKeyword:@"北京"];

参数说明:

参数 说明
NSString *keyword 搜索关键词:
支持输入一个文本关键词:keyword=北京
支持多个行政区划代码,英文逗号分隔:keyword=130681,419001

QMSDistrictListSearchOption全国行政区域检索参数

该参数无必填字段,初始化后即可发起行政区域检索。

QMSDistrictListSearchOption *listOpt = [[QMSDistrictListSearchOption alloc] init];

QMSDistrictChildrenSearchOption子级行政区域检索参数

构建子级行政区域检索参数QMSDistrictChildrenSearchOption,id为非必填字段,缺省时返回最顶级行政区划:

QMSDistrictChildrenSearchOption *childOpt = [[QMSDistrictChildrenSearchOption alloc] init];
[childOpt setID:@"110000"];

参数说明:

参数 说明
NSString *ID 父级行政区划ID,缺省时则返回最顶级行政区划

发起行政区域检索

调用QMSSearcherAPI中的searchWithDistrictSearchSearchOption:发起关键词行政区域检索

[self.mySearcher searchWithDistrictSearchSearchOption:distOpt];

调用QMSSearcherAPI中的searchWithDistrictListSearchOption:发起全国行政区域检索

[self.mySearcher searchWithDistrictListSearchOption:listOpt];

调用QMSSearcherAPI中的searchWithDistrictChildrenSearchOption:发起子级行政区域检索

[self.mySearcher searchWithDistrictChildrenSearchOption:childOpt];

在回调中处理搜索数据

当检索成功后,会调用到searchWithDistrictSearchOption: didReceiveResult:回调函数,通过解析QMSDistrictSearchResult 数据把所需的结果绘制到地图上。

- (void)searchWithDistrictSearchOption:(QMSDistrictBaseSearchOption *)districtSearchOption didRecevieResult:(QMSDistrictSearchResult *)districtSearchResult
{
    self.distResult = districtSearchResult;
    NSLog(@"%@",self.distResult);
}

QMSDistrictSearchResult类属性说明:

属性 说明
NSArray<NSArray<QMSDistrictData *> *> *result 结果数组:
第0项,代表一级行政区划;
第1项,代表二级行政区划,以此类推;
使用getchildren接口时,仅为指定父级行政区划的子级;
元素类型包含QMSDistrictData元素的数组

QMSDistrictData类属性说明:

属性 说明
NSString *id_ 行政区划唯一标识;注:省直辖地区,在数据表现上有一个重复的虚拟节点(其id最后两位为99),其目的是为了表明省直辖关系而增加的,开发者可根据实际需要选用
NSString *name 简称,如“内蒙古”
NSString *fullname 全称,如“内蒙古自治区”
CLLocationCoordinate2D location 中心点坐标(经纬度)
NSArray<NSString *> *pinyin 行政区划拼音,每一下标为一个字的全拼
如:[“nei”,“meng”,“gu”]
NSArray<NSNumber *> *cidx 子级行政区划在下级数组中的下标位置

获取检索结果result里的数据可以参考demo


效果示例

关键词检索行政区划

使用 QMSDistrictSearchSearchOption 参数搜索 “北京”:

QMSDistrictSearchSearchOption *distOpt = [[QMSDistrictSearchSearchOption alloc] init];
[distOpt setKeyword:@"北京"];
[self.mySearcher searchWithDistrictSearchSearchOption:distOpt];

全国行政区划检索

使用 QMSDistrictListSearchOption 参数搜索:

QMSDistrictListSearchOption *listOpt = [[QMSDistrictListSearchOption alloc] init];
[self.mySearcher searchWithDistrictListSearchOption:listOpt];

子级行政区划检索

使用 QMSDistrictChildrenSearchOption 参数搜索"110000":

QMSDistrictChildrenSearchOption *childOpt = [[QMSDistrictChildrenSearchOption alloc] init];
[childOpt setID:@"110000"];
[self.mySearcher searchWithDistrictChildrenSearchOption:childOpt];

行政区域轮廓点串

腾讯地图SDK自4.4.0版本起支持搜索行政区域点串。


  1. 构造检索参数:如果需要获取行政区域的轮廓点串,在构造检索参数时 keyword 属性需要制定为行政区域的adcode,使用行政区域的名称则不会生效:

    // 以北京市为例
    QMSDistrictSearchSearchOption *option = [[QMSDistrictSearchSearchOption alloc] init];
    option.keyword = @"110000";
    // 纯陆地行政区划,可通过max_offset设置返回轮廓的抽稀级别
    option.get_polygon = QMSDistrictPolygonWithLandOnly;
    // 轮廓点的抽吸精度
    option.max_offset = 100;
    [self.searcher searchWithDistrictSearchSearchOption:option];
    
  2. 获取检索结果:QMSDistrictData 检索结果数据类型新增了 NSArray *polygon 属性,该属性包含了行政区域轮廓坐标点串:

    - (void)searchWithDistrictSearchOption:(QMSDistrictBaseSearchOption *)districtSearchOption didRecevieResult:(QMSDistrictSearchResult *)districtSearchResult {
     
        NSArray *districtArray = districtSearchResult.result.firstObject;
        QMSDistrictData *data = districtArray.firstObject;
    
        CLLocationCoordinate2D coords[data.polygon.count];
    
        for (int i = 0; i < data.polygon.count; i++) {
            NSValue *coordValue = data.polygon[i];
            coords[i] = [coordValue coordinateValue];    
        }
    
        QPolygon *polygon = [[QPolygon alloc] initWithWithCoordinates:coords count:data.polygon.count];
        [self.mapView addOverlay:polygon];
    }
    
  3. 效果如下图所示:


错误信息回调

当检索失败时,回调函数searchWithSearchOption: didFailWithError:会返回对应的错误信息

- (void)searchWithSearchOption:(QMSSearchOption *)searchOption didFailWithError:(NSError *)error
{
    NSLog(@"%@",error);
}

更详细设置请参考demo

这篇文章对您解决问题是否有帮助?

已解决
未解决