任何人都可以帮我计算或将谷歌地图相机缩放级别转换为KM距离。当用户缩小谷歌地图时,我想向api发送距离以获取更多引脚数据。
答案 0 :(得分:6)
您可以像这样计算地图中心和左上角坐标之间的距离:
VisibleRegion visibleRegion = mMap.getProjection().getVisibleRegion();
double distance = SphericalUtil.computeDistanceBetween(
visibleRegion.farLeft, mMap.getCameraPosition().target);
请注意,我正在使用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类但它不准确:
附加代码:
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,可能是因为地图没有完成加载。
您可以将代码定制到按钮侦听器,几秒钟后单击此按钮,您将看到不同的结果。