将Google地图缩放级别转换为km

时间:2017-01-05 09:47:29

标签: android google-maps

任何人都可以帮我计算或将谷歌地图相机缩放级别转换为KM距离。当用户缩小谷歌地图时,我想向api发送距离以获取更多引脚数据。

3 个答案:

答案 0 :(得分:6)

您可以像这样计算地图中心和左上角坐标之间的距离:

VisibleRegion visibleRegion = mMap.getProjection().getVisibleRegion();
double distance = SphericalUtil.computeDistanceBetween(
            visibleRegion.farLeft, mMap.getCameraPosition().target);

enter image description here

请注意,我正在使用Google Maps Android API Utility Library中的SphericalUtil.computeDistanceBetween方法。

答案 1 :(得分:3)

我将zoom level zl )简单转换为km。 如果 zl1 = 40,000km zl2 = 20,000km,依此类推。所以每个级别都会达到半公里。因此,

km =(40000/2 ^ zl)* 2

e.g. zl = 4

km = (40000/2^4) * 2
   = 5000km

答案 2 :(得分:0)

一个好的开始可以是:

https://developers.google.com/maps/documentation/android-api/utility/#spherical

我自己使用SphericalUtil类但它不准确:

https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/SphericalUtil.java

附加代码:

private void animateToMeters(int meters, LatLng ll) {
        int mapHeightInDP = 256;
        Resources r = getResources();
        int mapSideInPixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mapHeightInDP, r.getDisplayMetrics());

    LatLngBounds latLngBounds = calculateBounds(ll, meters);
    if (latLngBounds != null) {
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(latLngBounds, mapSideInPixels, mapSideInPixels, MARKER_BOUNDS);
        if (gMap != null)
            gMap.animateCamera(cameraUpdate);
    }
}

@NonNull
private LatLngBounds calculateBounds(LatLng center, double radius) {
    return new LatLngBounds.Builder().
            include(SphericalUtil.computeOffset(center, radius, 0)).
            include(SphericalUtil.computeOffset(center, radius, 90)).
            include(SphericalUtil.computeOffset(center, radius, 180)).
            include(SphericalUtil.computeOffset(center, radius, 270)).build();
}


private LatLng centerMapOnMyLocation() {
        Location locationCt = getLastKnownLocation();
        if (locationCt == null) {
            return null;
        }

        LatLng latLng = new LatLng(locationCt.getLatitude(), locationCt.getLongitude());
           .icon(BitmapDescriptorFactory.fromResource(android.R.drawable.ic_menu_add)));

        gMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        return latLng;
    }

用法:

LatLng ll = centerMapOnMyLocation();
if (ll != null) {
    animateToMeters(1500, ll);
}

修改

Zohaib Akram你的结果,9504762.698378386,可能是因为地图没有完成加载。

您可以将代码定制到按钮侦听器,几秒钟后单击此按钮,您将看到不同的结果。