基于百度地图android地图SDK开发(2)

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);

效果图

这里写图片描述

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值