搜索POI-iOS 最后更新时间: 2021年01月22日
概述
通过兴趣点搜索, 实现乘客选择目的地, 进而实现车辆估价&路径导航等功能, 是乘客端功能中必要的能力. 高德提供了千万级别的 POI(Point of Interest,兴趣点).在地图表达中,一个 POI 可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、找景点、找厕所等等的功能.地图 SDK 的搜索功能提供多种获取 POI 数据的接口.
关键词检索POI
关键字检索介绍
根据关键字检索适用于在某个城市搜索某个名称相关的POI,例如:查找北京市的“肯德基”.
注意:
1、关键字未设置城市信息(默认为全国搜索)时,如果涉及多个城市数据返回,仅会返回建议城市,请根据APP需求,选取城市进行搜索.
2、不设置POI的类别,默认返回“餐饮服务”、“商务住宅”、“生活服务”这三种类别的POI,下方提供了POI分类码表,请按照列表内容设置希望检索的POI类型.(建议使用POI类型的代码进行检索)
使用关键字检索
第 1 步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件.
Objective-CSwift
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
第 2 步,配置Key
在使用搜索功能时,需要添加 Key.
如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:
iOS 搜索功能 v4.x 版本设置 Key:
Objective-CSwift
[AMapServices sharedServices].apiKey = @"您的key";
如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新.
iOS 搜索功能 v3.x 版本设置 Key:
Objective-CSwift
[AMapSearchServices sharedServices].apiKey = @"您的key";
第 3 步,定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>.
第 4 步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理.
Objective-CSwift
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
第 5 步,设置关键字检索参数
进行关键字检索的请求参数类为 AMapPOIKeywordsSearchRequest,其中 keywords 是必设参数.types 为搜索类型.
Objective-CSwift
AMapPOIKeywordsSearchRequest *request = [[AMapPOIKeywordsSearchRequest alloc] init];
request.keywords = @"北京大学";
request.city = @"北京";
request.types = @"高等院校";
request.requireExtension = YES;
/* 搜索SDK 3.2.0 中新增加的功能,只搜索本城市的POI。*/
request.cityLimit = YES;
request.requireSubPOIs = YES;
第 6 步,发起POI关键字搜索
调用 AMapSearchAPI 的 AMapPOIKeywordsSearch 并发起关键字检索.
Objective-CSwift
[self.search AMapPOIKeywordsSearch:request];
第 7 步,在回调中处理数据
当检索成功时,会进到 onPOISearchDone 回调函数中,通过解析 AMapPOISearchResponse 对象把检索结果在地图上绘制点展示出来.
说明:
1)可以在回调中解析 response,获取 POI 信息.
2)response.pois 可以获取到 AMapPOI 列表,POI 详细信息可参考 AMapPOI 类.
3)若当前城市查询不到所需 POI 信息,可以通过 response.suggestion.cities 获取当前 POI 搜索的建议城市.
4)如果搜索关键字明显为误输入,则可通过 response.suggestion.keywords 属性得到搜索关键词建议.
Objective-CSwift
/* POI 搜索回调. */
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response
{
if (response.pois.count == 0)
{
return;
}
//解析response获取POI信息,具体解析见 Demo
}
注意:
- 关键词搜索中, 会返回子POI信息(childrenPOI), 如果存在此类POI需在搜索展示找那个展示出来, 例如: 搜索首都机场, 搜索中展示首都机场-T3航站楼
- 搜索中返回POIID, 可用作导航中导航目的地, 进而解决因POI过大造成绕路的问题
输入内容自动提示
输入提示查询介绍
输入提示是指根据用户输入的关键词,给出相应的提示信息,将最有可能的搜索词呈现给用户,以减少用户输入信息,提升用户体验.如:输入“方恒”,提示“方恒国际中心A座”,“方恒购物中心”等.
输入提示返回的提示语对象 AMapTip 有多种属性,可根据该对象的返回信息,配合其他搜索服务使用,完善您应用的功能.如:
1)uid为空,location为空,该提示语为品牌词,可根据该品牌词进行POI关键词搜索.
2)uid不为空,location为空,为公交线路,根据uid进行公交线路查询.
3)uid不为空,location也不为空,是一个真实存在的POI,可直接显示在地图上.
使用输入提示查询
第 1 步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件.
Objective-CSwift
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
第 2 步,配置Key
在使用搜索功能时,需要添加 Key.
如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:
iOS 搜索功能 v4.x 版本设置 Key:
Objective-CSwift
[AMapServices sharedServices].apiKey = @"您的key";
如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新.
iOS 搜索功能 v3.x 版本设置 Key:
Objective-CSwift
[AMapSearchServices sharedServices].apiKey =@"您的key";
第 3 步,定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>.
第 4 步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理.
Objective-CSwift
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
第 5 步,设置输入提示查询的参数
请求参数类为 AMapInputTipsSearchRequest,keywords是必填参数.
Objective-CSwift
AMapInputTipsSearchRequest *tips = [[AMapInputTipsSearchRequest alloc] init];
tips.keywords = key;
tips.city = @"北京";
// tips.cityLimit = YES; 是否限制城市
第 6 步,发起输入提示语查询
Objective-CSwift
[self.search AMapInputTipsSearch:tips];
第 7 步,在回调中处理数据
当检索成功时,会进到 onInputTipsSearchDone 回调函数中,通过解析 AMapInputTipsSearchResponse 对象获取输入提示词进行展示.
说明:
1)可以在回调中解析 response,获取提示词.
2)通过 response.tips 可以获取到 AMapTip 列表,Poi详细信息可参考 AMapTip 类(包含:adcode、district、name等信息).
Objective-CSwift
/* 输入提示回调. */
- (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest *)request response:(AMapInputTipsSearchResponse *)response
{
//解析response获取提示词,具体解析见 Demo
}