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

因为测试过程中发现,如果使用了上述代码进行中心点范围内搜索,则每次 执行过后中心点的经纬度坐标是不会发生相应变化的。应该使用:“第四”部中的方法进行搜索,这样搜索出的结果就是我们所预期的结果

 

posted on 2015-04-17 11:51  飘杨......  阅读(4465)  评论(0编辑  收藏  举报