POI检索及百度地图InfoWindow的使用
1.POI周边检索与区域检索并在地图上显示检索结果标记
(1)实例化POI检索
mPoiSearch = PoiSearch.newInstance();
(2)创建、设置POI监听
OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener(){
public void onGetPoiResult(PoiResult result){
//获取POI检索结果
}
public void onGetPoiDetailResult(PoiDetailResult result){
//获取Place详情页检索结果
}
};
……
mPoiSearch.setOnGetPoiSearchResultListener(poiListener);
(3)发起检索请求
//周边检索
mPoiSearch.searchNearby(new PoiNearbySearchOption()
.keyword("美食")
.sortType(PoiSortType.comprehensive)
.location(new LatLng(latitude, longitude))
.radius(3000)
.pageNum(1));
//区域检索
LatLngBounds searchbound = new LatLngBounds.Builder()
.include(northeast).include(southwest)
.build();
mPoiSearch.searchInBound(new PoiBoundSearchOption().bound(searchbound)
.keyword("地铁站"));
(4)释放POI检索实例
@Override
protected void onDestroy() {
super.onDestroy();
mPoiSearch.destroy();
}
(5)构造MyPoiOverlay内部类(继承于PoiOverlay),在其点击事件内设置发起每个点的详情检索
private class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public boolean onPoiClick(int i) {
super.onPoiClick(i);
PoiInfo poiInfo = getPoiResult().getAllPoi().get(i);
// 检索poi详细信息
mPoiSearch.searchPoiDetail(new PoiDetailSearchOption()
.poiUid(poiInfo.uid));
System.out.println("UID"+poiInfo.uid);
return true;
}
}
(6)设置详情检索结果监听
public void onGetPoiDetailResult(final PoiDetailResult result) {
if (result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(PoiSearchActivity.this, "抱歉,未找到结果",
Toast.LENGTH_SHORT).show();
} else {// 正常返回结果的时候,此处可以获得很多相关信息
……
}
}
(7)在onGetPoiResult接口中添加MyPoiOverlay,从而POI检索将结果显示为标记点
public void onGetPoiResult(PoiResult result) {
//获取POI检索结果
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
mapManager.clear();
//创建PoiOverlay
PoiSearchActivity.MyPoiOverlay overlay = new PoiSearchActivity.MyPoiOverlay(mapManager);
//设置PoiOverlay数据
overlay.setData(result);
mapManager.setOnMarkerClickListener(overlay);
//添加PoiOverlay到地图中
overlay.addToMap();
overlay.zoomToSpan();
int totalPage = result.getTotalPageNum();// 获取总分页数
System.out.println("总共查到" + result.getTotalPoiNum() + "个兴趣点, 分为" + totalPage + "页");
return;
}
}
2.利用InfoWindow在标记点上显示详情
在onGetPoiDetailResult接口中使用InfoWindow
InfoWindow mInfoWindow;
LatLng llInfo = result.getLocation(); //定义用于显示该InfoWindow的坐标点
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
View view = inflater.inflate(R.layout.search_result, null); //view可以为自定义的view
……
mInfoWindow = new InfoWindow(view, llInfo, -47);
mapManager.showInfoWindow(mInfoWindow);