最后更新时间:2025-03-25
QMSSearcherAPI提供了三个行政区划相关查询接口,封装了腾讯地图 WebService API 的行政区划查询功能,更详细的接口描述可以查阅官网。这里对 SDK 提供的行政区划查询接口做简要描述。
| 接口名 | 功能 |
|---|---|
| searchWithDistrictSearchSearchOption: | 根据关键词搜索行政区划 |
| searchWithDistrictListSearchOption: | 发起全国行政区域检索 |
| searchWithDistrictChildrenSearchOption: | 发起子级行政区域检索 |
构建关键字行政区域检索参数 QMSDistrictSearchSearchOption,其中 keyword 为必填字段:
QMSDistrictSearchSearchOption *distOpt = [[QMSDistrictSearchSearchOption alloc] init];
[distOpt setKeyword:@"北京"];
参数说明:
| 参数 | 说明 |
|---|---|
| NSString *keyword | 搜索关键词: 支持输入一个文本关键词:keyword=北京 支持多个行政区划代码,英文逗号分隔:keyword=130681,419001 |
该参数无必填字段,初始化后即可发起行政区域检索。
QMSDistrictListSearchOption *listOpt = [[QMSDistrictListSearchOption alloc] init];
构建子级行政区域检索参数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);
}
| 属性 | 说明 |
|---|---|
| NSArray<NSArray<QMSDistrictData *> *> *result | 结果数组: 第0项,代表一级行政区划; 第1项,代表二级行政区划,以此类推; 使用getchildren接口时,仅为指定父级行政区划的子级; 元素类型包含QMSDistrictData元素的数组 |
| 属性 | 说明 |
|---|---|
| NSString *id_ | 行政区划唯一标识;注:省直辖地区,在数据表现上有一个重复的虚拟节点(其id最后两位为99),其目的是为了表明省直辖关系而增加的,开发者可根据实际需要选用 |
| NSString *name | 简称,如“内蒙古” |
| NSString *fullname | 全称,如“内蒙古自治区” |
| CLLocationCoordinate2D location | 中心点坐标(经纬度) |
| NSArray<NSString *> *pinyin | 行政区划拼音,每一下标为一个字的全拼 如:[“nei”,“meng”,“gu”] |
| NSArray<NSNumber *> *cidx | 子级行政区划在下级数组中的下标位置 |
| NSArray *polygon | 行政区域轮廓坐标点串,类型为encode的CLLocationCoordinate2D |
| NSArray <NSArray <NSValue *> *> *polygons | 一个或多个行政区域轮廓坐标点串数组,元素类型为encode的CLLocationCoordinate2D |
获取检索结果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
有帮助
没帮助