随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

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   飘杨......  阅读(4646)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示