在Google中将Google地图缩放到特定半径(英里)

时间:2016-09-08 08:30:13

标签: android google-maps google-maps-api-3 android-maps-v2 android-maps

我希望zoomGoogle map指定为特定半径,以英里为单位,例如10英里/ 20英里/ 30英里等,根据我在Android中的条件。

我需要的是从当前的lat长点绘制一个特定半径的圆(10/20/30 ..英里)并将地图缩放到我用半径绘制圆的特定英里。

我可以指出我当前的位置,绘制圆圈。但是我无法将地图缩放到所需的半径英里(圆圈应该以指定的英里为焦点,并以当前位置为中心)。

目前我正在使用以下代码进行缩放:

gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), 15));
                    gooMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
                    Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong);
                    circle.remove();
                    circle = gooMap.addCircle(new CircleOptions()
                            .center(new LatLng(selectedLat, selectedLong))
                            .radius(iMiles * 1609.34) // Converting Miles into Meters...
                            .strokeColor(Color.RED)
                            .strokeWidth(5));
                    circle.isVisible();

我知道将缩放级别设置为15不会将地图缩放到所需的里程。但我需要将地图缩放到所需的里程半径。我怎样才能实现它。任何人都可以帮助我。 修改: - 添加的图片详细说明了我需要的内容。 Image_1: - 当我将半径设置为10英里时,地图应如图所示进行缩放。 Image_2当我将半径设置为50英里时,地图应如图所示进行缩放。 请查看地图位置的差异,以分析我需要的缩放级别。 Image_1 Image_2 提前谢谢。

2 个答案:

答案 0 :(得分:3)

我得到了相同的解决方案,这是一个:

// Zoom in, animating the camera.
                double iMeter = iMiles * 1609.34;
                circle.remove();
                circle = gooMap.addCircle(new CircleOptions()
                        .center(new LatLng(selectedLat, selectedLong))
                        .radius(iMeter) // Converting Miles into Meters...
                        .strokeColor(Color.RED)
                        .strokeWidth(5));
                circle.isVisible();
                float currentZoomLevel = getZoomLevel(circle);
                float animateZomm = currentZoomLevel + 5;

                Log.e("Zoom Level:", currentZoomLevel + "");
                Log.e("Zoom Level Animate:", animateZomm + "");

                gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), animateZomm));
                gooMap.animateCamera(CameraUpdateFactory.zoomTo(currentZoomLevel), 2000, null);
                Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong);

我们根据设备计算缩放级别的方法如下:

public float getZoomLevel(Circle circle) {
        float zoomLevel=0;
        if (circle != null){
            double radius = circle.getRadius();
            double scale = radius / 500;
            zoomLevel =(int) (16 - Math.log(scale) / Math.log(2));
        }
        return zoomLevel +.5f;
    }

答案 1 :(得分:0)

当视图刷新时,您需要找到屏幕上的距离。我不太熟悉新的API和视图,但这样的事情应该有效:

  LatLngBounds bounds = map.getProjection().getVisibleRegion().latLngBounds;
        double llNeLat = bounds.northeast.latitude;
        double llSwLat = bounds.southwest.latitude;
        double llNeLng = bounds.northeast.longitude;
        double llSwLng = bounds.southwest.longitude;
        float results[] = new float[5];
        Location.distanceBetween(llNeLat, llNeLng, llSwLat, llSwLng, results);
        float radius = results[0];
        // radius is distance top right to bottom left on screen in metres
        // so use maybe 3/4 of this, then conert your miles to that value
        // in metres

然后将该值添加到addCircle调用