更新时间:2020-06-23
行政区边界数据检索简介
行政区边界数据检索可以根据省、市、县(区)级行政区划名称,返回查询行政区划的详细边界信息。
实现步骤
1引入头文件
行政区边界数据检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework
Objective-C
Swift
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
2初始化行政区边界数据检索对象
Objective-C
Swift
BMKDistrictSearch *search = [[BMKDistrictSearch alloc] init];
let districtSearch = BMKDistrictSearch()
3设置行政区边界数据检索代理
Objective-C
Swift
search.delegate = self;
districtSearch.delegate = self
4构造行政区边界数据检索参数
Objective-C
Swift
BMKDistrictSearchOption *option = [[BMKDistrictSearchOption alloc] init]; option.city = @"北京"; option.district = @"朝阳区";
//初始化请求参数类BMKDistrictSearchOption的实例 let districtOption = BMKDistrictSearchOption() //城市名,必选 districtOption.city = "北京" //区县名字,可选 districtOption.district = "朝阳区"
5发起行政区边界数据检索请求
Objective-C
Swift
BOOL flag = [search districtSearch:option]; if (flag) { NSLog(@"district检索发送成功"); } else { NSLog(@"district检索发送失败"); }
/** 行政区域检索:异步方法,返回结果在BMKDistrictSearchDelegate的 onGetDistrictResult里 districtOption 公交线路检索信息类 return 成功返回YES,否则返回NO */ let flag = districtSearch.districtSearch(districtOption) if flag { print("行政区域检索发送成功") } else { print("行政区域检索发送失败") }
6实现代理方法,获取检索结果
Objective-C
Swift
/** *返回行政区域搜索结果 *@param searcher 搜索对象 *@param result 搜索结果BMKDistrictSearch *@param error 错误号,@see BMKSearchErrorCode */ - (void)onGetDistrictResult:(BMKDistrictSearch *)searcher result:(BMKDistrictResult *)result errorCode:(BMKSearchErrorCode)error { if (error == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 } else { NSLog(@"检索失败"); } }
/** 行政区域检索结果回调 @param searcher 检索对象 @param result 行政区域检索结果 @param error 错误码,@see BMKCloudErrorCode */ func onGetDistrictResult(_ searcher: BMKDistrictSearch!, result: BMKDistrictResult!, errorCode error: BMKSearchErrorCode) { if (error == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 } else { NSLog(@"检索失败"); } }
7处理检索返回的结果
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKDistrictSearchPage。BMKDistrictResult类结构如下图:
说明:
BMKDistrictResult 行政区边界检索结果类
NSArray *paths 行政区边界直角地理坐标点数据(NSString数组,字符串数据格式为: @"x,y;x,y")
注意:paths中部分行政区会有多条数据,绘制后其中一些与大区域不相连的区域称为飞地,比如朝阳区的首都国际机场区域。
以北京朝阳区为例,检索后绘制效果如下: