通过缩放级别更改半径

时间:2016-09-22 07:09:26

标签: java android google-maps google-maps-android-api-2

我希望根据缩放级别计算以米或公里为单位的半径。

我找到了这个公式 - 它给出了每像素大致计算的米数: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

此外,这些链接帮助我理解了我想要完成的事情: google map API zoom range How to get center of map for v2 android maps?

这是实施:

double calculateScale(float zoomLevel, LatLng centerPos){
    double meters_per_pixel = 156543.03392 * Math.cos(centerPos.latitude * Math.PI / 180) / Math.pow(2, zoomLevel);

    return meters_per_pixel;
}

这就是我听缩放级别改变的方式:

        _map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
        @Override
        public void onCameraIdle() {
            Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Current Zoom : " + _map.getCameraPosition().zoom);
            Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Center Lat : " + _map.getCameraPosition().target.latitude +
                    ", Center Long : " + _map.getCameraPosition().target.longitude);
        }}

现在,每当用户更改缩放级别时,我希望确定在地图视图中可以显示的最大半径是什么...

1 个答案:

答案 0 :(得分:1)

您可以使用下一个代码段:

_map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
    @Override
    public void onCameraIdle() {
        Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Current Zoom : " + _map.getCameraPosition().zoom);
        Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Center Lat : " + _map.getCameraPosition().target.latitude +
                ", Center Long : " + _map.getCameraPosition().target.longitude);

        float zoom = _map.getCameraPosition().zoom;
        LatLng position = _map.getCameraPosition().target;
        double maxRadius = calculateScale(zoom, position) * mapViewDiagonal() / 2;
    }
}

private mapViewDiagonal() {
    return Math.sqrt(_map.getWidth() * _map.getWidth() + _map.getHeight() * _map.getHeight());
}