zoukankan      html  css  js  c++  java
  • 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);

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

  • 相关阅读:
    xp 安装 win7 64
    局域网内传输文件速度慢
    安全和共享设置
    vs2005无法启动
    dos快速通道
    xp 共享 guest
    Java菜题
    Java序列化总结(最全)
    Bitset改进你的程序质量
    Java反射方法总结
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/4434452.html
Copyright © 2011-2022 走看看