行政区划
更新日期: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版本起支持搜索行政区域点串。
-
构造检索参数:如果需要获取行政区域的轮廓点串,在构造检索参数时 keyword 属性需要制定为行政区域的adcode,使用行政区域的名称则不会生效:
// 以北京市为例 QMSDistrictSearchSearchOption *option = [[QMSDistrictSearchSearchOption alloc] init]; option.keyword = @"110000"; // 纯陆地行政区划,可通过max_offset设置返回轮廓的抽稀级别 option.get_polygon = QMSDistrictPolygonWithLandOnly; // 轮廓点的抽吸精度 option.max_offset = 100; [self.searcher searchWithDistrictSearchSearchOption:option];
-
获取检索结果: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]; }
-
效果如下图所示:
错误信息回调
当检索失败时,回调函数searchWithSearchOption: didFailWithError:
会返回对应的错误信息
- (void)searchWithSearchOption:(QMSSearchOption *)searchOption didFailWithError:(NSError *)error
{
NSLog(@"%@",error);
}
更详细设置请参考demo