开发 出行解决方案接入规范 行程前-相关服务 选择目的地 搜索POI-Android

搜索POI-Android 最后更新时间: 2021年01月22日

概述

通过兴趣点搜索, 实现乘客选择目的地, 进而实现车辆估价&路径导航等功能, 是乘客端功能中必要的能力. 

高德提供了千万级别的 POI(Point of Interest,兴趣点).在地图表达中,一个 POI 可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、找景点、找厕所等等的功能.地图 SDK 的搜索功能提供多种获取 POI 数据的接口

关键词检索POI

根据关键字检索适用于在某个城市搜索某个名称相关的POI,例如:查找北京市的“肯德基”.

注意:

1、关键字未设置城市信息(默认为全国搜索)时,如果涉及多个城市数据返回,仅会返回建议城市,请根据APP需求,选取城市进行搜索.

2、不设置POI的类别,默认返回“餐饮服务”、“商务住宅”、“生活服务”这三种类别的POI,下方提供了POI分类码表,请按照列表内容设置希望检索的POI类型.(建议使用POI类型的代码进行检索)

实现关键字检索的步骤如下:

  • 1.继承 OnPoiSearchListener 监听.
  • 2.构造 PoiSearch.Query 对象,通过 PoiSearch.Query(String query, String ctgr, String city) 设置搜索条件.
query = new PoiSearch.Query(keyWord, "", cityCode);
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
query.setPageSize(10);// 设置每页最多返回多少条poiitem
query.setPageNum(currentPage);//设置查询页码

点击下载POI分类码表

  • 3.构造 PoiSearch 对象,并设置监听.
poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
  • 4.调用 PoiSearch 的 searchPOIAsyn() 方法发送请求.
Java
poiSearch.searchPOIAsyn();
  • 5、通过回调接口 onPoiSearched 解析返回的结果,将查询到的 POI 以绘制点的方式显示在地图上.
  • 6、说明:
    1. 可以在回调中解析result,获取POI信息.
    2. result.getPois()可以获取到PoiItem列表,Poi详细信息可参考PoiItem类.
    3. 若当前城市查询不到所需POI信息,可以通过result.getSearchSuggestionCitys()获取当前Poi搜索的建议城市.
    4. 如果搜索关键字明显为误输入,则可通过result.getSearchSuggestionKeywords()方法得到搜索关键词建议.
    5. 返回结果成功或者失败的响应码.1000为成功,其他为失败(详细信息参见网站开发指南-实用工具-错误码对照表)

public void onPoiSearched(PoiResult result, int rCode) {
     //解析result获取POI信息
}

注意:

  • 关键词搜索中, 会返回子POI信息(childrenPOI),  如果此类POI需要在搜索框展示出来 , 例如: 搜索首都机场,  搜索中展示首都机场-T3航站楼
  • 搜索中返回POIID, 可用作导航中导航目的地, 进而解决因POI过大造成绕路的问题

输入内容自动提示

输入提示是指根据用户输入的关键词,给出相应的提示信息,将最有可能的搜索词呈现给用户,以减少用户输入信息,提升用户体验。如:输入“方恒”,提示“方恒国际中心A座”,“方恒购物中心”等.

例如用户输入“高德”,输入框下方的列表会显示包含关键字字段的输入提示信息。显示效果如图所示:

实现输入提示的步骤如下:

1、继承 InputtipsListener 监听.

2、构造 InputtipsQuery 对象,通过 InputtipsQuery(java.lang.String keyword, java.lang.String city) 设置搜索条件.

//第二个参数传入null或者“”代表在全国进行检索,否则按照传入的city进行检索
InputtipsQuery inputquery = new InputtipsQuery(newText, city);
inputquery.setCityLimit(true);//限制在当前城市

3、构造 Inputtips 对象,并设置监听.

Inputtips inputTips = new Inputtips(InputtipsActivity.this, inputquery);
inputTips.setInputtipsListener(this);


4、调用 PoiSearch 的 requestInputtipsAsyn() 方法发送请求.

Java
inputTips.requestInputtipsAsyn();

5、通过回调接口 onGetInputtips 解析返回的结果,获取输入提示返回的信息.

6、说明:

  1. 在回调中解析 tipList,获取输入提示词的相关信息.
  2. tipList 数组中的对象是 Tip ,Tip 类中包含 PoiID、Adcode、District、Name 等信息.

注意:

  1. 由于提示中会出现相同的关键字,但是这些关键字所在区域不同,使用时可以通过 tipList.get(i).getDistrict() 获得区域,也可以在提示时在关键字后加上区域.
  2. 当 Tip 的 getPoiID() 返回空,并且 getPoint() 也返回空时,表示该提示词不是一个真实存在的 POI,这时区域、经纬度参数都是空的,此时可根据该提示词进行POI关键词搜索
  3. 当 Tip 的 getPoiID() 返回不为空,但 getPoint() 返回空时,表示该提示词是一个公交线路名称,此时用这个id进行公交线路查询。
  4. 当 Tip 的 getPoiID() 返回不为空,且 getPoint() 也不为空时,表示该提示词一个真实存在的POI,可直接显示在地图上。
@Override
public void onGetInputtips(final List<Tip> tipList, int rCode) {
        //通过tipList获取Tip信息
    }


注意事项

  • 更多功能请查看地图SDK-POI检索相关文档: Android地图 / iOS地图
  • 请注意:使用上述功能需要下载地图SDK,导入搜索功能的jar包.
  • 地图SDK V4.1.3版本开始,SDK不再提供 com.amap.api.maps.overlay 包下的overlay,已在官方demo中开源.


返回顶部 示例中心 常见问题 智能客服 公众号
二维码