天使漫步IT工作室天使漫步IT工作室

【android】如何获取百度地图中心点经纬度 - 百度SDK总结


Warning: count(): Parameter must be an array or an object that implements Countable in /www/wwwroot/u11u.com/usr/themes/wq/functions.php on line 110

Warning: count(): Parameter must be an array or an object that implements Countable in /www/wwwroot/u11u.com/usr/themes/wq/functions.php on line 116

百度地图很好用,让我意外的是竟然原生聚合功能。

不过让人苦恼的是,百度竟然没有中心点坐标的文档(明确中心点的获取办法),试了好多次才知道使用:setOnMapStatusChangeListener 监听地图的状态即可获得百度的中心点坐标,代码如下:


       /*map dragg */
        mBaiduMap.setOnMapStatusChangeListener( new BaiduMap.OnMapStatusChangeListener() {
            /**
             * 手势操作地图,设置地图状态等操作导致地图状态开始改变。
             * @param status 地图状态改变开始时的地图状态
             */
            public void onMapStatusChangeStart(MapStatus status){
            }
            /**
             * 地图状态变化中
             * @param status 当前地图状态
             */
            public void onMapStatusChange(MapStatus status){
            }
            /**
             * 地图状态改变结束
             * @param status 地图状态改变结束后的地图状态
             */
            public void onMapStatusChangeFinish(MapStatus status){
                //移动以后
                LatLng ll=status.target;
                my_lat=ll.latitude;
                my_lng=ll.longitude;
                Log.d("map change","sts ch fs:"+my_lat+","+my_lng+"");
            }
        });

代码解析

当百度地图被移动以后,会触发一系列事件,最后会停在onMapStatusChangeFinish这个时间上。当然,如果你注册监听那么将会被代码截获并写自己的逻辑代码。

按照上面说的当百度移动结束以后,在onMapStatusChangeFinish会得到一个MapStatus类型的实例,这个MapStatus的target成员变量即为百度移动被移动以后的中心点坐标。

即:

public void onMapStatusChangeFinish(MapStatus status){
                //移动以后
                LatLng ll=status.target;
                my_lat=ll.latitude;
                my_lng=ll.longitude;
                Log.d("map change","sts ch fs:"+my_lat+","+my_lng+"");
            }

扩展

当百度被移动得很小的时候,可以把前后的中心点做差,超出一定的范围后再处理事件。

如:

Point startPoint = ject.toScreenLocation(startLng);
                        Point finishPoint = ject.toScreenLocation(finishLng);
                        double x = Math.abs(finishPoint.x - startPoint.x);
                        double y = Math.abs(finishPoint.y - startPoint.y);
                        if (x > 5 || y > 5) {
                            //逻辑处理代码
                        }

本站原创,欢迎转载,转载敬请标明出处:天使漫步IT工作室 » 【android】如何获取百度地图中心点经纬度 - 百度SDK总结
添加新评论


Warning: Use of undefined constant php - assumed 'php' (this will throw an Error in a future version of PHP) in /www/wwwroot/u11u.com/usr/themes/wq/comments.php on line 38