如何计算 Google 静态地图图像的缩放比例

Gen*_*nie 5 java zooming google-maps-static-api

我目前正在使用 Google 静态地图图像,我希望了解如何计算给定缩放级别的比例。我知道谷歌地图使用墨卡托投影。我正在制作的应用程序从谷歌获取卫星地图图像,用户在其上绘制一个多边形。我需要以现实世界的单位计算这个多边形的面积。有什么建议???

Sol*_*tos 3

正如Google 地图文档中所述:

\n\n
\n

因为基本的墨卡托 Google 地图图块为 256 x 256 像素。
\n 另请注意,每个缩放级别,地图都有 2 n个图块。

\n
\n\n

这意味着在缩放级别 2 时,地图任意方向的像素 = 256 * 2\xc2\xb2 = 1024px。

\n\n

考虑到地球周长约为 40,000 公里,在缩放 0 时,每个像素 ~= 40,000 km/256 = 156.25 km
\n在缩放 9 时,像素为 131072:1px = 40,000 km / 131072 = 0.305 km ...等等。

\n\n

如果我们想要 400px = 1km,我们必须选择最接近的近似值,因此:1px = 1km/400 = 0.0025km

\n\n

我尝试了zoom = 15并获得了1px = 0.00478和zoom = 16,这给了我1px = 0.00238km

\n\n

这意味着您应该使用 Zoom = 16,并且赤道线上每 400px 就有 0.955km ,并且仅适用于x 坐标

\n\n

当你在纬度上向北或向南移动时,周长每次都会变小,从而改变距离。当然,它也会改变y 轴的相关性,因为球体的投影很棘手。
\n如果您想使用函数计算精确距离,您应该使用 Google 在其文档中提供的函数:

\n\n
// Describe the Gall-Peters projection used by these tiles.\n  gallPetersMapType.projection = {\n    fromLatLngToPoint: function(latLng) {\n      var latRadians = latLng.lat() * Math.PI / 180;\n      return new google.maps.Point(\n          GALL_PETERS_RANGE_X * (0.5 + latLng.lng() / 360),\n          GALL_PETERS_RANGE_Y * (0.5 - 0.5 * Math.sin(latRadians)));\n    },\n    fromPointToLatLng: function(point, noWrap) {\n      var x = point.x / GALL_PETERS_RANGE_X;\n      var y = Math.max(0, Math.min(1, point.y / GALL_PETERS_RANGE_Y));\n\n      return new google.maps.LatLng(\n          Math.asin(1 - 2 * y) * 180 / Math.PI,\n          -180 + 360 * x,\n          noWrap);\n    }\n  };\n
Run Code Online (Sandbox Code Playgroud)\n