通过关键字检索、周边检索以及多边形检索,或者任意形式得到的高德POI ID信息,可通过ID检索来获取POI完整详细信息。
实现步骤如下:
1、继承 OnPoiSearchListener 监听。
2、构造 PoiSearch 对象,并设置监听。对于ID检索,query参数设置成 null。
poiSearch = new PoiSearch(this, null);
poiSearch.setOnPoiSearchListener(this);
3、调用 PoiSearch 的 searchPOIIdAsyn(java.lang.String poiID) 方法发送请求。
poiSearch.searchPOIIdAsyn(ID);// 异步搜索
4、通过回调接口 onPoiItemSearched 解析返回的结果。由于是检索具体的某一个POI,直接回调该POI对象 PoiItem。
@Override
public void onPoiItemSearched(PoiItem item, int rCode) {
//获取PoiItem获取POI的详细信息
}
exe:
//向固定的经纬度添加一个标记
protected void addMarkerToMap(double latitude, double longitude)
{
_selfMarker = _amap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude))
.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker))));
}
//开启POI兴趣点搜索
protected void doSerarchPOI() {
_bt_startOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//开始搜索POI兴趣点
Log.e("Amap", "button onclick");
//拿到用户搜索地址的关键字
String dstAddr = _attv_dstAddr.getText().toString();
//开始POI搜索
// 1 创建一个搜索的条件对象 query
PoiSearch.Query query = new PoiSearch.Query(dstAddr, "", _city);
// 2 创建一个POISearch句柄和query关联
PoiSearch poiSearch = new PoiSearch(getApplicationContext(), query);
// 3 给search绑定一个回调函数
poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
@Override
public void onPoiSearched(PoiResult poiResult, int i) {
//处理得到的POI兴趣点集合 poiResult
if (i != 1000) {
Log.e("Amap", "poi Search error code = "+ i);
return ;
}
//搜索成功
List<PoiItem> poiList = poiResult.getPois();
for (int index = 0; index < poiList.size(); index++) {
//此时 表示处理每个已经搜索到的兴趣点
Log.e("Amap", "搜索到的兴趣点有");
PoiItem item = poiList.get(index);
Log.e("Amap", "poi title =" + item.getTitle()+
"latitude = " +item.getLatLonPoint().getLatitude()+
"longitude = "+ item.getLatLonPoint().getLongitude());
//给每个搜索到的标记点画一个标记
addMarkerToMap(item.getLatLonPoint().getLatitude(),
item.getLatLonPoint().getLongitude());
//默认以第一个兴趣点为我们坐标点
_endPoint = new LatLonPoint(item.getLatLonPoint().getLatitude(),
item.getLatLonPoint().getLongitude());
drawRouteLine();
if (index == 0) {
break;
}
}
}
//处理单个的数据
@Override
public void onPoiItemSearched(PoiItem poiItem, int i) {
}
});
// 4 启动搜索
poiSearch.searchPOIAsyn();
}
});
}
参考文档:https://lbs.amap.com/api/android-sdk/guide/map-data/poi