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

Zoh*_*ram 3 android google-maps

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

lam*_*bda 10

我有我的zoom level( zl ) 到 km 的简单转换。如果zl1 =40,000kmzl2 =20,000km等等。所以每一级都会减半公里。因此,

公里 = ( 40000/2 ^ zl ) * 2

e.g. zl = 4

km = (40000/2^4) * 2
   = 5000km
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,谢谢。其逆过程(获取缩放级别覆盖的公里数)是:`let Zoom = getBaseLog(2, 40000 / (km / 2));` (2认同)

Eta*_*Eta 8

我真的很喜欢 @lambda 解决方案的简单性,但似乎缩放级别已重新调整。

当我进行测试时,我有 zl3 = 38Mm , zl6 = 4.8Mm , zl9 = 600km ...但这仅在赤道上可靠,您必须添加另一个乘数来考虑纬度。

所以我的最终公式如下所示:

公里 = (38000 / 2 ^ ( zl - 3)) * cos(纬度)

其中 zl = 地图缩放级别,lat = 地图中心纬度(以度为单位)

对于 JS 用户,您可以复制以下内容:

const km = 38000 / Math.pow(2, zl - 3) * Math.cos(lat * Math.PI / 180);
Run Code Online (Sandbox Code Playgroud)

现在是时候制作相反的公式了:

zl = log2(38000 * cos(纬度) / 公里) + 3

翻译成 JS 为:

const zl = Math.log2(38000 * Math.cos ( lat * Math.PI / 180) / km) + 3
Run Code Online (Sandbox Code Playgroud)

PS:我不知道分辨率是否有影响,我使用的是全高清屏幕(1920 x 1080)


ant*_*nio 7

您可以计算地图中心和左上角坐标之间的距离,如下所示:

VisibleRegion visibleRegion = mMap.getProjection().getVisibleRegion();
double distance = SphericalUtil.computeDistanceBetween(
            visibleRegion.farLeft, mMap.getCameraPosition().target);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,我用SphericalUtil.computeDistanceBetween的方法谷歌地图API的Android实用工具库.