3.0+百度地圖,如何獲取地圖中心點位置(每次滑動地圖后都能夠獲取地圖的中心點位置,並做出相應的操作)


現在有這樣一個業務:

1.將地圖定位到指定的經緯度位置,當地圖停止滑動時搜索附近的地址信息列表,並顯示再ListView中。

2.每次滑動地圖都需要根據地圖中心點位置搜索附近1000米范圍內的地址,並顯示再列表,直至退出。

 

下面是具體實現的代碼:

一:實例化PoiSearch並設置獲取結果的監聽器setOnGetPoiSearchResultListener

// 創建POI檢索實例
        poiSearch = PoiSearch.newInstance();
        // 設置監聽器
        poiSearch.setOnGetPoiSearchResultListener(poiSearchListener);
        baiduMap = mapView.getMap();
        //設置地圖中心點位置
        MapStatus status = new MapStatus.Builder().target(new LatLng(MyLocation.getInstance().getLocation().getLatitude(), MyLocation.getInstance().getLocation().getLongitude())).build();
        searchMoveFinish(status);
        // 設置地圖的縮放級別
        MapStatus mapStatus = new MapStatus.Builder().zoom(18).build();
        baiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));

二、獲取poi搜索結果監聽器:次監聽的目的是可以使用戶手動模糊搜索

/**
     * 創建POI檢索監聽者
     */
    OnGetPoiSearchResultListener poiSearchListener = new OnGetPoiSearchResultListener() {

        @Override
        public void onGetPoiResult(PoiResult poiResult) {
            if (poiResult != null && poiResult.getAllPoi() != null) {
                adapter.setData(poiResult.getAllPoi());
                mSearchResultList.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            } else {
                ToastUtil.getInstance().showTips(ChooseLocationActivity.this,
                        ToastUtil.TOAST_WARING, "沒有更多了!");
            }
            adapter.setSelected(-1);
        }

        @Override
        public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
            // 獲取Place詳情頁檢索結果
            ToastUtil.getInstance().showTips(ChooseLocationActivity.this,
                    ToastUtil.TOAST_WARING, "特美的,居然在這里執行了!");
        }
    };

三、監聽地圖的狀態變化

baiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {

            @Override
            public void onMapStatusChangeStart(MapStatus status) {

            }

            // 移動結束,在這里需要計算出中心點坐標
            @Override
            public void onMapStatusChangeFinish(MapStatus status) {
                searchMoveFinish(status);

            }

            @Override
            public void onMapStatusChange(MapStatus status) {

            }
        });

第四、(重要)根據地理位置信息搜索指定經緯度1000米范圍內的所有的地址信息,此方法是“每次滑動地圖后都能夠獲取地圖的中心點位置,並做出相應的操作”的主要方法

private void searchMoveFinish(MapStatus status) {
        GeoCoder geoCoder = GeoCoder.newInstance();
        ReverseGeoCodeOption reverCoder = new ReverseGeoCodeOption();
        reverCoder.location(status.target);
        geoCoder.reverseGeoCode(reverCoder); //
        geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {

            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) { // TODO
                                                                                // stub
                if (arg0 != null && arg0.getPoiList() != null) {
                    adapter.setData(arg0.getPoiList());
                    mSearchResultList.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                } else {
                    ToastUtil.getInstance().showTips(
                            ChooseLocationActivity.this,
                            ToastUtil.TOAST_WARING, "沒有更多了!");
                }
            }

            @Override
            public void onGetGeoCodeResult(GeoCodeResult arg0) { //

            }
        });

    }

測試過程遇到的一些問題:注意,移動地圖后根據,地圖中心點進行搜索時,一定不要使用下面這段代碼進行處理:

PoiNearbySearchOption option = new PoiNearbySearchOption();
        option.location(new LatLng(MyLocation.getInstance().getLocation()
                .getLatitude(), MyLocation.getInstance().getLocation()
                .getLongitude()));
        option.keyword(keyword);
        option.radius(1000);
        option.pageNum(10);
        poiSearch.searchNearby(option);

因為測試過程中發現,如果使用了上述代碼進行中心點范圍內搜索,則每次 執行過后中心點的經緯度坐標是不會發生相應變化的。應該使用:“第四”部中的方法進行搜索,這樣搜索出的結果就是我們所預期的結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM