浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
POI检索简介

POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。 百度地图SDK提供五种类型的POI检索:POI城市检索、POI周边检索、POI矩形区域检索、POI室内检索以及POI详情检索。

POI城市内检索

城市检索是根据关键字检索适用于在「某个行政区划,如北京市、四川省等」搜索某个名称相关的POI,例如:查找北京市的“小吃”。

实现步骤
1引入头文件

POI城市检索功能使用的是地图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初始化POI城市检索对象
Objective-C
Swift
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
3设置POI城市检索代理
Objective-C
Swift
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self
4构造POI城市检索参数

BMKPOICitySearchOption 中tags字段可参考文档百度地图POI行业分类

Objective-C
Swift
//初始化请求参数类BMKCitySearchOption的实例
BMKPOICitySearchOption *cityOption = [[BMKPOICitySearchOption alloc] init];
//检索关键字,必选。举例:小吃
cityOption.keyword = @"小吃";
//区域名称(市或区的名字,如北京市,海淀区),最长不超过25个字符,必选
cityOption.city = @"北京市";
//检索分类,可选,与keyword字段组合进行检索,多个分类以","分隔。举例:美食,烧烤,酒店
//tags字段不建议使用
//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 = "北京市"
//tags字段不建议使用
//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。

5发起POI城市检索请求
Objective-C
Swift
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城市内检索失败")
}
6实现代理方法,获取检索结果
Objective-C
Swift
#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("其他检索结果错误码相关处理")
    }
}
7处理检索返回的结果

通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOICitySearchPage。 BMKPOISearchResult类结构如下图:
poiCity.png
说明:
BMKPOISearchResult     POI检索结果类

BMKPoiInfo                  POI信息类

BMKPOIDetailInfo          POI详情信息类

NSArray<BMKPOIDetailChildrenInfo *> *children     POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION

POI周边(圆形区域)检索

周边检索是一个圆形范围,适用于以某个位置为中心点,自定义检索半径值,搜索某个位置附近的POI。例如:查找当前位置(40.051231, 116.282051)附近1000米范围内的“小吃”。

实现步骤
1引入头文件

POI周边检索功能使用的是地图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初始化POI周边检索对象
Objective-C
Swift
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
3设置POI周边检索代理
Objective-C
Swift
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self
4构造POI周边检索参数

BMKPOINearbySearchOption 中tags字段可参考文档百度地图POI行业分类

Objective-C
Swift
//初始化请求参数类BMKNearbySearchOption的实例
BMKPOINearbySearchOption *nearbyOption = [[BMKPOINearbySearchOption alloc] init];
//检索关键字,必选
nearbyOption.keywords = @[@"小吃"];
//检索中心点的经纬度,必选
nearbyOption.location = CLLocationCoordinate2DMake(40.051231, 116.282051);
//检索半径,单位是米。
nearbyOption.radius = 1000;
//检索分类,可选。
//tags字段不建议使用
//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。

5发起POI周边检索请求
Objective-C
Swift
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周边检索失败")
}
6实现代理方法,获取检索结果
Objective-C
Swift
#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("其他检索结果错误码相关处理")
    }
}
7处理检索返回的结果

通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOINearbySearchPage,BMKPOISearchResult类结构如下图:
PoiNearby.png
说明:
BMKPOISearchResult     POI检索结果类

BMKPoiInfo                   POI信息类

BMKPOIDetailInfo          POI详情信息类

NSArray<BMKPOIDetailChildrenInfo *> *children     POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION

POI矩形区域检索

POI矩形区域检索是在指定的绘制的矩形范围内(依据左下角坐标和右上角坐标绘制的矩形范围)检索POI。

实现步骤
1引入头文件

POI矩形区域检索功能使用的是地图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初始化POI矩形区域检索对象
Objective-C
Swift
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
3设置POI矩形区域检索代理
Objective-C
Swift
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self
4构造POI矩形区域检索参数

BMKPOIBoundSearchOption中tags字段可参考文档百度地图POI行业分类

Objective-C
Swift
//初始化请求参数类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。

5发起POI矩形区域检索请求
Objective-C
Swift
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区域内检索失败")
}
6实现代理方法,获取检索结果
Objective-C
Swift
#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("其他检索结果错误码相关处理")
    }
}
7处理检索返回的结果

通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIBoundsSearchPage。BMKPOISearchResult类结构如下图
PoiNearby.png
说明:
BMKPOISearchResult      POI检索结果类

BMKPoiInfo                    POI信息类

BMKPOIDetailInfo           POI详情信息类

NSArray<BMKPOIDetailChildrenInfo *> *children     POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION


POI室内检索

POI室内检索是指检索室内地图上的POI,输入室内id和关键字后,返回室内地图内的POI的点。

实现步骤
1引入头文件

POI室内检索功能使用的是地图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初始化POI室内检索对象
Objective-C
Swift
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
3设置POI室内检索代理
Objective-C
Swift
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self
4构造POI室内检索参数

BMKPOIBoundSearchOption中tags字段可参考文档百度地图POI行业分类

Objective-C
Swift
//初始化请求参数类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
5发起POI室内检索请求
Objective-C
Swift
BOOL flag = [poiSearch poiIndoorSearch:indoorOption];
if(flag) {
    NSLog(@"POI室内检索成功");
} else {
    NSLog(@"POI室内检索失败");
}
let flag = poiSearch.poiIndoorSearch(indoorOption)
if flag {
    NSLog("POI室内检索成功")
} else {
    NSLog("POI室内检索失败")
}
6实现代理方法,获取检索结果
Objective-C
Swift
#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("其他检索结果错误码相关处理")
    }
}
7处理检索返回的结果

通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIIndoorSearchPage。BMKPOIIndoorSearchResult类结构如下图:
PoiIndoor.png
说明:
BMKPOISearchResult     POI室内检索结果类

BMKPoiIndoorInfo          POI信息类

BMKPOIDetailInfo          室内POI信息类


注意: 1.室内地图默认是关闭的,检索室内POI需要打开室内地图功能。 2.室内地图需要显示在屏幕范围内,才支持检索当前室内地图的室内POI。


POI详情检索

POI详情检索提供查询单个POI的详情信息,比如好评、门店营业时间等。

实现步骤
1引入头文件

POI详情检索功能使用的是地图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初始化POI详情检索对象
Objective-C
Swift
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
let poiSearch = BMKPoiSearch()
3设置POI详情检索代理
Objective-C
Swift
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self
4构造POI详情检索参数
Objective-C
Swift
//初始化请求参数类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
5发起POI详情检索请求
Objective-C
Swift
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详情检索失败")
}
6实现代理方法,获取检索结果
Objective-C
Swift
#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("其他检索结果错误码相关处理")
    }
}
7处理检索返回的结果

通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIDetailSearchPage。BMKPOIDetailSearchResult类结构如下图:
PoiDetail.png
说明:
BMKPOIDetailSearchResult    POI详情检索结果类

BMKPoiInfo                          POI信息类

BMKPOIDetailInfo                 POI详情信息类

NSArray <BMKPOIDetailChildrenInfo *> *children    POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION

  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消