全部服务产品
开发者频道
定价
登录
POI检索
下载开发文档
POI检索简介

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

POI城市内检索

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

实现步骤
1. 引入头文件

POI城市检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework

#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
2. 初始化POI城市检索对象
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
3. 设置POI城市检索代理
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
4. 构造POI城市检索参数

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;
注意:scope字段默认为基本信息BMK_POI_SCOPE_BASIC_INFORMATION,如果要使用检索过滤条件filter字段,需要将scope字段设置为详细信息BMK_POI_SCOPE_DETAIL_INFORMATION。
5. 发起POI城市检索请求
BOOL flag = [poiSearch poiSearchInCity:cityOption];
if(flag) {
NSLog(@"POI城市内检索成功");
} else {
NSLog(@"POI城市内检索失败");
}
6. 实现代理方法,获取检索结果
#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(@"其他检索结果错误码相关处理");
}
}
7. 处理检索返回的结果

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

poiCity.png

说明:

BMKPOISearchResultPOI检索结果类
BMKPoiInfoPOI信息类
BMKPOIDetailInfoPOI详情信息类
NSArray<BMKPOIDetailChildrenInfo *> *childrenPOI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION
POI周边(圆形区域)检索

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

实现步骤
1. 引入头文件

POI周边检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework

#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
2. 初始化POI周边检索对象
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
3. 设置POI周边检索代理
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
4. 构造POI周边检索参数

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;
注意:scope字段默认为基本信息BMK_POI_SCOPE_BASIC_INFORMATION,如果要使用检索过滤条件filter字段,需要将scope字段设置为详细信息BMK_POI_SCOPE_DETAIL_INFORMATION。
5. 发起POI周边检索请求
BOOL flag = [poiSearch poiSearchNearBy:nearbyOption];
if (flag) {
NSLog(@"POI周边检索成功");
} else {
NSLog(@"POI周边检索失败");
}
6. 实现代理方法,获取检索结果
#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(@"其他检索结果错误码相关处理");
}
}
7. 处理检索返回的结果

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

PoiNearby.png

说明:

BMKPOISearchResultPOI检索结果类
BMKPoiInfoPOI信息类
BMKPOIDetailInfoPOI详情信息类
NSArray<BMKPOIDetailChildrenInfo *> *childrenPOI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION
POI矩形区域检索

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

实现步骤
1. 引入头文件

POI矩形区域检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework

#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
2. 初始化POI矩形区域检索对象
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
3. 设置POI矩形区域检索代理
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
4. 构造POI矩形区域检索参数

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;

注意:scope字段默认为基本信息BMK_POI_SCOPE_BASIC_INFORMATION,如果要使用检索过滤条件filter字段,需要将scope字段设置为详细信息BMK_POI_SCOPE_DETAIL_INFORMATION。

5. 发起POI矩形区域检索请求
BOOL flag = [poiSearch poiSearchInbounds:boundOption];
if(flag) {
NSLog(@"POI矩形区域内检索成功");
} else {
NSLog(@"POI矩形区域内检索失败");
}
6. 实现代理方法,获取检索结果
#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(@"其他检索结果错误码相关处理");
}
}
7. 处理检索返回的结果

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

PoiNearby.png

说明:

BMKPOISearchResultPOI检索结果类
BMKPoiInfoPOI信息类
BMKPOIDetailInfo POI详情信息类
NSArray<BMKPOIDetailChildrenInfo *> *childrenPOI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION
POI室内检索

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

实现步骤
1. 引入头文件

POI室内检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework

#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
2. 初始化POI室内检索对象
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
3. 设置POI室内检索代理
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
4. 构造POI室内检索参数

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

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

PoiIndoor.png

说明:

BMKPOISearchResultPOI室内检索结果类
BMKPoiIndoorInfoPOI信息类
BMKPOIDetailInfo室内POI信息类

注意: 1.室内地图默认是关闭的,检索室内POI需要打开室内地图功能。

    2.室内地图需要显示在屏幕范围内,才支持检索当前室内地图的室内POI。

POI详情检索

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

实现步骤
1. 引入头文件

POI详情检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包BaiduMapAPI_Search.framework

#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
2. 初始化POI详情检索对象
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
3. 设置POI详情检索代理
//此处需要先遵循协议<BMKPoiSearchDelegate>
poiSearch.delegate = self;
4. 构造POI详情检索参数
//初始化请求参数类BMKPoiDetailSearchOption的实例
BMKPOIDetailSearchOption *detailOption = [[BMKPOIDetailSearchOption alloc] init];
//POI的唯一标识符集合,必选
detailOption.poiUIDs = @[@"ba97895c02a6ddc7f60e775f"];
//POI检索结果详细程度
//detailOption.scope = BMK_POI_SCOPE_BASIC_INFORMATION;
5. 发起POI详情检索请求
BOOL flag = [poiSearch poiDetailSearch:detailOption];
if(flag) {
NSLog(@"POI详情检索成功");
} else {
NSLog(@"POI详情检索失败");
}
6. 实现代理方法,获取检索结果
#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(@"其他检索结果错误码");
}
}
7. 处理检索返回的结果

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

PoiDetail.png

说明:

BMKPOIDetailSearchResultPOI详情检索结果类
BMKPoiInfoPOI信息类
BMKPOIDetailInfoPOI详情信息类
NSArray <BMKPOIDetailChildrenInfo *> *childrenPOI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION

上一篇

蜂窝热力图

下一篇

AOI检索

本篇文章对您是否有帮助?