如何以米为单位测量Google地图的相机视口?

时间:2017-04-26 09:26:32

标签: android google-maps

规格:

我想根据标记的距离来缩放相机。如果Google地图中显示的所有标记都无法完全覆盖街道级别缩放(15),则切换到另一个内置缩放功能:CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding),满足要求。当标记彼此太靠近或者只有一个标记因为它放大到最大级别时,我不使用这个内置函数。我曾尝试使用GoogleMap#setMaxZoomPreference但它似乎不起作用。缩放级别不一定禁止钳制某个最大值(设置最大缩放级别变为无效)但我需要设置初始缩放,用户可以看到整个地图中存在的所有标记。

问题:

如何以米为单位测量相机视口?

思想:

我将需要可视区域并收集标记的所有距离,以确定我是否将使用街道级别缩放级别或内置缩放功能。

1 个答案:

答案 0 :(得分:1)

您可以测量每个摄像机上的视口宽度和高度,如下所示:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnCameraIdleListener {
    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setOnCameraIdleListener(this);
    }

    @Override
    public void onCameraIdle() {
        VisibleRegion viewPort = mMap.getProjection().getVisibleRegion();
        double viewPortHeight = SphericalUtil.computeDistanceBetween(viewPort.nearLeft, viewPort.farLeft);
        double viewPortWidth = SphericalUtil.computeDistanceBetween(viewPort.nearLeft, viewPort.nearRight);
    }
}

我使用Google Maps Android API Utility Library

中的SphericalUtil.computeDistanceBetween方法