在Android中获取可见地图的半径

前端之家收集整理的这篇文章主要介绍了在Android中获取可见地图的半径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有可能从中点找到可见地图的半径吗?

我想从API到地图的中心点附近的位置,该API需要lat,lng和radius.我可以从中心点得到纬度和距离,但是找不到半径的方法.

谢谢

解决方法

对于Google Maps Android API,您可以通过…获得边界

从地图参考,获得getProjection()的投影.而且,

a projection is used to translate between on screen location and geographic coordinates..

所以从投影中我们可以使用getVisibleRegion(),并得到VisibleRegion的地图,其中包含一个LatLngBounds,它是一个包含2个LatLng变量的类,一个是东北角,一个在西南角.

所以代码应该是这样的:

googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition position) {
                LatLngBounds bounds = googleMap.getProjection().getVisibleRegion().latLngBounds;
                LatLng northeast = bounds.northeast;
                LatLng southwest = bounds.southwest;

                Context context = getApplicationContext();
                CharSequence text = "ne:"+northeast+" sw:"+southwest;
                int duration = Toast.LENGTH_SHORT;

                Toast toast = Toast.makeText(context,text,duration);
                toast.show();
            }
        });

= – = – = – = – = – =
编辑:

可能我太天真了,只给NE和SW可以解决这个问题,但是只有在用户没有旋转地图或向3D倾斜的特殊情况下才可以.

所以你可以抓住VisibleRegion,它提供了4个变量,farRight,farLeft,nearRight,nearLeft,每个代表4个区域的conners.

然后我们可以计算4点的区域的宽度和高度,并选择较小的一个(有时候宽度可以大于我猜的高度).

而对于计算,我们可以使用Location.distanceBetween(x1,y1,x2,y2,result)函数

这使得代码如下所示:

VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion();

                LatLng farRight = visibleRegion.farRight;
                LatLng farLeft = visibleRegion.farLeft;
                LatLng nearRight = visibleRegion.nearRight;
                LatLng nearLeft = visibleRegion.nearLeft;

                float[] distanceWidth = new float[2];
                Location.distanceBetween(
                        (farRight.latitude+nearRight.latitude)/2,(farRight.longitude+nearRight.longitude)/2,(farLeft.latitude+nearLeft.latitude)/2,(farLeft.longitude+nearLeft.longitude)/2,distanceWidth
                        );


                float[] distanceHeight = new float[2];
                Location.distanceBetween(
                        (farRight.latitude+nearRight.latitude)/2,distanceHeight
                );

                float distance;

                if (distanceWidth[0]>distanceHeight[0]){
                    distance = distanceWidth[0];
                } else {
                    distance = distanceHeight[0];
                }

猜你在找的Android相关文章