POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。 百度地图SDK提供五种类型的POI检索:POI城市检索、POI周边检索、POI矩形区域检索、POI室内检索以及POI详情检索。
城市检索是根据关键字检索适用于在「某个行政区划,如北京市、四川省等」搜索某个名称相关的POI,例如:查找北京市的“小吃”。
POI城市检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self
BMKPOICitySearchOption 中tags字段可参考文档百度地图POI行业分类
//初始化请求参数类BMKCitySearchOption的实例 BMKPOICitySearchOption *cityOption = [[BMKPOICitySearchOption alloc] init]; //检索关键字,必选。举例:小吃 cityOption.keyword = @"小吃"; //区域名称(市或区的名字,如北京市,海淀区),最长不超过25个字符,必选 cityOption.city = @"北京市"; //检索分类,可选,与keyword字段组合进行检索,多个分类以","分隔。举例:美食,烧烤,酒店 cityOption.tags = @[@"美食",@"烧烤"]; //区域数据返回限制,可选,为YES时,仅返回city对应区域内数据 cityOption.isCityLimit = YES; //POI检索结果详细程度 //cityOption.scope = BMK_POI_SCOPE_BASIC_INFORMATION; //检索过滤条件,scope字段为BMK_POI_SCOPE_DETAIL_INFORMATION时,filter字段才有效 //cityOption.filter = filter; //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 cityOption.pageIndex = 0; //单次召回POI数量,默认为10条记录,最大返回20条 cityOption.pageSize = 10;
//初始化请求参数类BMKCitySearchOption的实例 let cityOption = BMKPOICitySearchOption() //检索关键字,必选。举例:小吃 cityOption.keyword = "小吃" //区域名称(市或区的名字,如北京市,海淀区),最长不超过25个字符,必选 cityOption.city = "北京市" //检索分类,与keyword字段组合进行检索,多个分类以","分隔。举例:美食,酒店 cityOption.tags = ["美食","烧烤"] //区域数据返回限制,可选,为true时,仅返回city对应区域内数据 cityOption.isCityLimit = true /** POI检索结果详细程度 BMK_POI_SCOPE_BASIC_INFORMATION: 基本信息 BMK_POI_SCOPE_DETAIL_INFORMATION: 详细信息 */ //cityOption.scope = BMKPOISearchScopeType.BMK_POI_SCOPE_DETAIL_INFORMATION //检索过滤条件,scope字段为BMK_POI_SCOPE_DETAIL_INFORMATION时,filter字段才有效 //cityOption.filter = option.filter //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 cityOption.pageIndex = 0 //单次召回POI数量,默认为10条记录,最大返回20条 cityOption.pageSize = 10
注意:scope字段默认为基本信息BMK_POI_SCOPE_BASIC_INFORMATION,如果要使用检索过滤条件filter字段,需要将scope字段设置为详细信息BMK_POI_SCOPE_DETAIL_INFORMATION。
BOOL flag = [poiSearch poiSearchInCity:cityOption]; if(flag) { NSLog(@"POI城市内检索成功"); } else { NSLog(@"POI城市内检索失败"); }
let flag = poiSearch.poiSearch(inCity: cityOption) if flag { NSLog("POI城市内检索成功") } else { NSLog("POI城市内检索失败") }
#pragma mark - BMKPoiSearchDelegate /** *返回POI搜索结果 *@param searcher 搜索对象 *@param poiResult 搜索结果列表 *@param errorCode 错误码,@see BMKSearchErrorCode */ - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPOISearchResult*)poiResult errorCode:(BMKSearchErrorCode)errorCode { //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回 if (errorCode == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 NSLog(@"检索结果返回成功:%@",poiResult.poiInfoList); } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { NSLog(@"检索词有歧义"); } else { NSLog(@"其他检索结果错误码相关处理"); } }
/** POI检索返回结果回调 @param searcher 检索对象 @param poiResult POI检索结果列表 @param error 错误码 */ func onGetPoiResult(_ searcher: BMKPoiSearch, result poiResult: BMKPOISearchResult, errorCode: BMKSearchErrorCode) { if errorCode == BMK_SEARCH_NO_ERROR { //在此处理正常结果 print("检索结果返回成功") } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { print("检索词有歧义") } else { print("其他检索结果错误码相关处理") } }
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOICitySearchPage。 BMKPOISearchResult类结构如下图:
说明:
BMKPOISearchResult POI检索结果类
BMKPoiInfo POI信息类
BMKPOIDetailInfo POI详情信息类
NSArray<BMKPOIDetailChildrenInfo *> *children POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION
周边检索是一个圆形范围,适用于以某个位置为中心点,自定义检索半径值,搜索某个位置附近的POI。例如:查找当前位置(40.051231, 116.282051)附近1000米范围内的“小吃”。
POI周边检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self
BMKPOINearbySearchOption 中tags字段可参考文档百度地图POI行业分类
//初始化请求参数类BMKNearbySearchOption的实例 BMKPOINearbySearchOption *nearbyOption = [[BMKPOINearbySearchOption alloc] init]; //检索关键字,必选 nearbyOption.keywords = @[@"小吃"]; //检索中心点的经纬度,必选 nearbyOption.location = CLLocationCoordinate2DMake(40.051231, 116.282051); //检索半径,单位是米。 nearbyOption.radius = 1000; //检索分类,可选。 nearbyOption.tags = @[@"美食"]; //是否严格限定召回结果在设置检索半径范围内。默认值为false。 nearbyOption.isRadiusLimit = NO; //POI检索结果详细程度 //nearbyOption.scope = BMK_POI_SCOPE_BASIC_INFORMATION; //检索过滤条件,scope字段为BMK_POI_SCOPE_DETAIL_INFORMATION时,filter字段才有效 //nearbyOption.filter = filter; //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 nearbyOption.pageIndex = 0; //单次召回POI数量,默认为10条记录,最大返回20条。 nearbyOption.pageSize = 10;
//初始化请求参数类BMKNearbySearchOption的实例 let nearbyOption = BMKPOINearbySearchOption() /** 检索关键字,必选。 在周边检索中关键字为数组类型,可以支持多个关键字并集检索,如银行和酒店。每个关键字对应数组一个元素。 最多支持10个关键字。 */ nearbyOption.keywords = ["小吃"] //检索中心点的经纬度,必选 nearbyOption.location = CLLocationCoordinate2DMake(40.051231, 116.282051) /** 检索半径,单位是米。 当半径过大,超过中心点所在城市边界时,会变为城市范围检索,检索范围为中心点所在城市 */ nearbyOption.radius = 1000 /** 检索分类,可选。 该字段与keywords字段组合进行检索。 支持多个分类,如美食和酒店。每个分类对应数组中一个元素 */ nearbyOption.tags = ["美食"] /** 是否严格限定召回结果在设置检索半径范围内。默认值为false。 值为true代表检索结果严格限定在半径范围内;值为false时不严格限定。 注意:值为true时会影响返回结果中total准确性及每页召回poi数量,我们会逐步解决此类问题。 */ nearbyOption.isRadiusLimit = false /** POI检索结果详细程度 BMK_POI_SCOPE_BASIC_INFORMATION: 基本信息 BMK_POI_SCOPE_DETAIL_INFORMATION: 详细信息 */ //nearbyOption.scope = BMKPOISearchScopeType.BMK_POI_SCOPE_DETAIL_INFORMATION //检索过滤条件,scope字段为BMK_POI_SCOPE_DETAIL_INFORMATION时,filter字段才有效 //nearbyOption.filter = option.filter //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 nearbyOption.pageIndex = 0 //单次召回POI数量,默认为10条记录,最大返回20条。 nearbyOption.pageSize = 10
注意:scope字段默认为基本信息BMK_POI_SCOPE_BASIC_INFORMATION,如果要使用检索过滤条件filter字段,需要将scope字段设置为详细信息BMK_POI_SCOPE_DETAIL_INFORMATION。
BOOL flag = [poiSearch poiSearchNearBy:nearbyOption]; if (flag) { NSLog(@"POI周边检索成功"); } else { NSLog(@"POI周边检索失败"); }
/** 根据中心点、半径和检索词发起周边检索:异步方法,返回结果在BMKPoiSearchDelegate 的onGetPoiResult里 nearbyOption 周边搜索的搜索参数类 成功返回YES,否则返回NO */ let flag = poiSearch.poiSearchNear(by: nearbyOption) if flag { print("POI周边检索成功") } else { print("POI周边检索失败") }
#pragma mark - BMKPoiSearchDelegate /** *返回POI搜索结果 *@param searcher 搜索对象 *@param poiResult 搜索结果列表 *@param errorCode 错误码,@see BMKSearchErrorCode */ - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPOISearchResult*)poiResult errorCode:(BMKSearchErrorCode)errorCode { //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回 if (errorCode == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 NSLog(@"检索结果返回成功:%@",poiResult.poiInfoList); } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { NSLog(@"检索词有歧义"); } else { NSLog(@"其他检索结果错误码相关处理"); } }
/** POI检索返回结果回调 @param searcher 检索对象 @param poiResult POI检索结果列表 @param error 错误码 */ func onGetPoiResult(_ searcher: BMKPoiSearch, result poiResult: BMKPOISearchResult, errorCode: BMKSearchErrorCode) { if errorCode == BMK_SEARCH_NO_ERROR { //在此处理正常结果 print("检索结果返回成功") } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { print("检索词有歧义") } else { print("其他检索结果错误码相关处理") } }
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOINearbySearchPage,BMKPOISearchResult类结构如下图:
说明:
BMKPOISearchResult POI检索结果类
BMKPoiInfo POI信息类
BMKPOIDetailInfo POI详情信息类
NSArray<BMKPOIDetailChildrenInfo *> *children POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION
POI矩形区域检索是在指定的绘制的矩形范围内(依据左下角坐标和右上角坐标绘制的矩形范围)检索POI。
POI矩形区域检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self
BMKPOIBoundSearchOption中tags字段可参考文档百度地图POI行业分类
//初始化请求参数类BMKBoundSearchOption的实例 BMKPOIBoundSearchOption *boundOption = [[BMKPOIBoundSearchOption alloc] init]; //检索关键字,必选。 boundOption.keywords = @[@"小吃"]; //矩形检索区域的左下角经纬度坐标,必选 boundOption.leftBottom = CLLocationCoordinate2DMake(40.049557, 116.279295); //矩形检索区域的右上角经纬度坐标,必选 boundOption.rightTop = CLLocationCoordinate2DMake(40.056057, 116.308102); //检索分类 boundOption.tags = @[@"美食"]; //POI检索结果详细程度 //boundOption.scope = BMK_POI_SCOPE_BASIC_INFORMATION; //检索过滤条件,scope字段为BMK_POI_SCOPE_DETAIL_INFORMATION时,filter字段才有效 //boundOption.filter = filter; //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 boundOption.pageIndex = 0; //单次召回POI数量,默认为10条记录,最大返回20条。 boundOption.pageSize = 10;
//初始化请求参数类BMKBoundSearchOption的实例 let boundOption = BMKPOIBoundSearchOption() /** 检索关键字,必选。 在矩形检索中关键字为数组类型,可以支持多个关键字并集检索,如银行和酒店。每个关键字对应数组一个元素。 最多支持10个关键字。 */ boundOption.keywords = ["小吃"] //矩形检索区域的左下角经纬度坐标,必选 boundOption.leftBottom = CLLocationCoordinate2DMake(40.049557, 116.279295) //矩形检索区域的右上角经纬度坐标,必选 boundOption.rightTop = CLLocationCoordinate2DMake(40.056057, 116.308102) /** 检索分类 该字段与keywords字段组合进行检索。 支持多个分类,如美食和酒店。每个分类对应数组中一个元素 */ boundOption.tags = ["美食"] /** POI检索结果详细程度 BMK_POI_SCOPE_BASIC_INFORMATION: 基本信息 BMK_POI_SCOPE_DETAIL_INFORMATION: 详细信息 */ //boundOption.scope = BMKPOISearchScopeType.BMK_POI_SCOPE_DETAIL_INFORMATION //检索过滤条件,scope字段为BMK_POI_SCOPE_DETAIL_INFORMATION时,filter字段才有效 //boundOption.filter = option.filter //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 boundOption.pageIndex = 0 //单次召回POI数量,默认为10条记录,最大返回20条 boundOption.pageSize = 10
注意:scope字段默认为基本信息BMK_POI_SCOPE_BASIC_INFORMATION,如果要使用检索过滤条件filter字段,需要将scope字段设置为详细信息BMK_POI_SCOPE_DETAIL_INFORMATION。
BOOL flag = [poiSearch poiSearchInbounds:boundOption]; if(flag) { NSLog(@"POI矩形区域内检索成功"); } else { NSLog(@"POI矩形区域内检索失败"); }
/** 根据范围和检索词发起范围检索:异步方法,返回结果在BMKPoiSearchDelegate 的onGetPoiResult里 boundOption 范围搜索的搜索参数类 成功返回YES,否则返回NO */ let flag = poiSearch.poiSearchInbounds(boundOption) if flag { print("POI区域内检索成功") } else { print("POI区域内检索失败") }
#pragma mark - BMKPoiSearchDelegate /** *返回POI搜索结果 *@param searcher 搜索对象 *@param poiResult 搜索结果列表 *@param errorCode 错误码,@see BMKSearchErrorCode */ - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPOISearchResult*)poiResult errorCode:(BMKSearchErrorCode)errorCode { //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回 if (errorCode == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 NSLog(@"检索结果返回成功:%@",poiResult.poiInfoList); } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { NSLog(@"检索词有歧义"); } else { NSLog(@"其他检索结果错误码相关处理"); } }
/** POI检索返回结果回调 @param searcher 检索对象 @param poiResult POI检索结果列表 @param error 错误码 */ func onGetPoiResult(_ searcher: BMKPoiSearch, result poiResult: BMKPOISearchResult, errorCode: BMKSearchErrorCode) { if errorCode == BMK_SEARCH_NO_ERROR { //在此处理正常结果 print("检索结果返回成功") } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { print("检索词有歧义") } else { print("其他检索结果错误码相关处理") } }
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIBoundsSearchPage。BMKPOISearchResult类结构如下图
说明:
BMKPOISearchResult POI检索结果类
BMKPoiInfo POI信息类
BMKPOIDetailInfo POI详情信息类
NSArray<BMKPOIDetailChildrenInfo *> *children POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION
POI室内检索是指检索室内地图上的POI,输入室内id和关键字后,返回室内地图内的POI的点。
POI室内检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self
BMKPOIBoundSearchOption中tags字段可参考文档百度地图POI行业分类
//初始化请求参数类BMKPoiIndoorSearchOption的实例 BMKPOIIndoorSearchOption *indoorOption = [[BMKPOIIndoorSearchOption alloc] init]; /** *室内检索唯一标识符,必选 *开启室内地图,在代理方法 *-(void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info *中可获取室内地图indoorID等相关信息 */ indoorOption.indoorID = @"1261284358413615103"; //室内检索关键字,必选 indoorOption.keyword = @"小吃"; //楼层(可选),设置后,会优先获取该楼层的室内POI,然后是其它楼层的。如“F3”,"B3"等。 indoorOption.floor = @"F4"; //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 indoorOption.pageIndex = 0; //单次召回POI数量,默认为10条记录,最大返回20条。 indoorOption.pageSize = 10;
//初始化请求参数类BMKPoiIndoorSearchOption的实例 let indoorOption = BMKPOIIndoorSearchOption() /** *室内检索唯一标识符,必选 *开启室内地图,在代理方法 *-(void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info *中可获取室内地图indoorID等相关信息 */ indoorOption.indoorID = "1261284358413615103" //室内检索关键字,必选 indoorOption.keyword = "小吃" //楼层(可选),设置后,会优先获取该楼层的室内POI,然后是其它楼层的。如“F3”,"B3"等。 indoorOption.floor = "F4" //分页页码,默认为0,0代表第一页,1代表第二页,以此类推 indoorOption.pageIndex = 0 //单次召回POI数量,默认为10条记录,最大返回20条。 indoorOption.pageSize = 10
BOOL flag = [poiSearch poiIndoorSearch:indoorOption]; if(flag) { NSLog(@"POI室内检索成功"); } else { NSLog(@"POI室内检索失败"); }
let flag = poiSearch.poiIndoorSearch(indoorOption) if flag { NSLog("POI室内检索成功") } else { NSLog("POI室内检索失败") }
#pragma mark - BMKPoiSearchDelegate /** *返回POI室内搜索结果 *@param searcher 搜索对象 *@param poiIndoorResult 搜索结果列表 *@param errorCode 错误码,@see BMKSearchErrorCode */ - (void)onGetPoiIndoorResult:(BMKPoiSearch*)searcher result:(BMKPOIIndoorSearchResult*)poiIndoorResult errorCode:(BMKSearchErrorCode)errorCode { //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回 if (errorCode == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 NSLog(@"检索结果返回成功:%@",poiIndoorResult.poiIndoorInfoList); } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { NSLog(@"检索词有歧义"); } else { NSLog(@"其他检索结果错误码"); } }
/** POI室内检索结果回调 @param searcher 检索对象 @param poiIndoorResult POI室内检索结果 @param errorCode 错误码,@see BMKCloudErrorCode */ func onGetPoiIndoorResult(_ searcher: BMKPoiSearch!, result poiIndoorResult: BMKPOIIndoorSearchResult!, errorCode: BMKSearchErrorCode) { if errorCode == BMK_SEARCH_NO_ERROR { //在此处理正常结果 print("检索结果返回成功") } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { print("检索词有歧义") } else { print("其他检索结果错误码相关处理") } }
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIIndoorSearchPage。BMKPOIIndoorSearchResult类结构如下图:
说明:
BMKPOISearchResult POI室内检索结果类
BMKPoiIndoorInfo POI信息类
BMKPOIDetailInfo 室内POI信息类
注意: 1.室内地图默认是关闭的,检索室内POI需要打开室内地图功能。 2.室内地图需要显示在屏幕范围内,才支持检索当前室内地图的室内POI。
POI详情检索提供查询单个POI的详情信息,比如好评、门店营业时间等。
POI详情检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate> poiSearch.delegate = self
//初始化请求参数类BMKPoiDetailSearchOption的实例 BMKPOIDetailSearchOption *detailOption = [[BMKPOIDetailSearchOption alloc] init]; //POI的唯一标识符集合,必选 detailOption.poiUIDs = @[@"ba97895c02a6ddc7f60e775f"]; //POI检索结果详细程度 //detailOption.scope = BMK_POI_SCOPE_BASIC_INFORMATION;
//初始化请求参数类BMKPoiDetailSearchOption的实例 let detailOption = BMKPOIDetailSearchOption() //POI的唯一标识符集合,必选 detailOption.poiUIDs = ["ba97895c02a6ddc7f60e775f"] /** POI检索结果详细程度 BMK_POI_SCOPE_BASIC_INFORMATION: 基本信息 BMK_POI_SCOPE_DETAIL_INFORMATION: 详细信息 */ //detailOption.scope = BMKPOISearchScopeType.BMK_POI_SCOPE_DETAIL_INFORMATION
BOOL flag = [poiSearch poiDetailSearch:detailOption]; if(flag) { NSLog(@"POI详情检索成功"); } else { NSLog(@"POI详情检索失败"); }
/** 根据POI UID 发起POI详情检索:异步方法,返回结果在BMKPoiSearchDelegate 的onGetPoiDetailResult里 detailOption POI详情检索参数类 成功返回YES,否则返回NO */ let flag = poiSearch.poiDetailSearch(detailOption) if flag { print("POI详情检索成功") } else { print("POI详情检索失败") }
#pragma mark - BMKPoiSearchDelegate /** *返回POI详情搜索结果 *@param searcher 搜索对象 *@param poiDetailResult 详情搜索结果 *@param errorCode 错误码,@see BMKSearchErrorCode */ - (void)onGetPoiDetailResult:(BMKPoiSearch*)searcher result:(BMKPOIDetailSearchResult*)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode { //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回 if(errorCode == BMK_SEARCH_NO_ERROR){ //在此处理正常结果 NSLog(@"检索结果正常返回:%@",poiDetailResult.poiInfoList); }else{ NSLog(@"其他检索结果错误码"); } }
/** POI详情检索结果回调 @param searcher 检索对象 @param poiDetailResult POI详情检索结果 @param errorCode 错误码,@see BMKCloudErrorCode */ func onGetPoiDetailResult(_ searcher: BMKPoiSearch!, result poiDetailResult: BMKPOIDetailSearchResult!, errorCode: BMKSearchErrorCode) { if errorCode == BMK_SEARCH_NO_ERROR { //在此处理正常结果 print("检索结果返回成功") } else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD) { print("检索词有歧义") } else { print("其他检索结果错误码相关处理") } }
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIDetailSearchPage。BMKPOIDetailSearchResult类结构如下图:
说明:
BMKPOIDetailSearchResult POI详情检索结果类
BMKPoiInfo POI信息类
BMKPOIDetailInfo POI详情信息类
NSArray <BMKPOIDetailChildrenInfo *> *children POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION