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>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
//此处需要先遵循协议<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;
BOOL flag = [poiSearch poiSearchInCity: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(@"其他检索结果错误码相关处理");}}
通过代理返回的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>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
//此处需要先遵循协议<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;
BOOL flag = [poiSearch poiSearchNearBy:nearbyOption];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(@"其他检索结果错误码相关处理");}}
通过代理返回的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>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
//此处需要先遵循协议<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;
BOOL flag = [poiSearch poiSearchInbounds:boundOption];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(@"其他检索结果错误码相关处理");}}
通过代理返回的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>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
//此处需要先遵循协议<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;
BOOL 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(@"其他检索结果错误码");}}
通过代理返回的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>
BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
//此处需要先遵循协议<BMKPoiSearchDelegate>poiSearch.delegate = self;
//初始化请求参数类BMKPoiDetailSearchOption的实例BMKPOIDetailSearchOption *detailOption = [[BMKPOIDetailSearchOption alloc] init];//POI的唯一标识符集合,必选detailOption.poiUIDs = @[@"ba97895c02a6ddc7f60e775f"];//POI检索结果详细程度//detailOption.scope = BMK_POI_SCOPE_BASIC_INFORMATION;
BOOL flag = [poiSearch poiDetailSearch:detailOption];if(flag) {NSLog(@"POI详情检索成功");} else {NSLog(@"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(@"其他检索结果错误码");}}
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的BMKPOIDetailSearchPage。BMKPOIDetailSearchResult类结构如下图:
说明:
BMKPOIDetailSearchResult | POI详情检索结果类 | ||
BMKPoiInfo | POI信息类 | ||
BMKPOIDetailInfo | POI详情信息类 | ||
NSArray <BMKPOIDetailChildrenInfo *> *children | POI详情子节点信息,默认不返回,需要将scope字段设置为BMK_POI_SCOPE_DETAIL_INFORMATION |
上一篇
下一篇
本篇文章对您是否有帮助?