如何计算适当的谷歌地图缩放级别

Posted

技术标签:

【中文标题】如何计算适当的谷歌地图缩放级别【英文标题】:How to calculate appropriate google maps zoom level 【发布时间】:2012-04-17 17:10:51 【问题描述】:

我有一个棘手的问题...我正在使用谷歌地图静态 API 创建带有标记的地图图像。考虑到我要显示的两个标记的位置,我正在努力做的是计算适当的缩放级别。

我有 latitudeA、longitudeA、latitudeB、longitudeB 和中心点(简单)。有谁知道解决缩放级别的公式吗?

谢谢!

【问题讨论】:

【参考方案1】:

即使你使用的是静态地图api,你仍然可以参考常规地图脚本文件,然后进行边界框计算:

map = new GMap2(document.getElementById("map"));

// Define the two corners of the bounding box
var sw = new GLatLng(59.0, 13.12); //any lat,lng pair
var ne = new GLatLng(60.35, 16.90);

var bounds = new GLatLngBounds(sw, ne);

var zoom = map.getBoundsZoomLevel(bounds));

【讨论】:

从技术上讲,我没有使用地图 api,我想做的只是获取地图图像以嵌入电子邮件中。如果不使用 GMap 调用,就没有办法(数学上)吗? 您是使用任何类型的编程语言来计算这个,还是只是想从某个地方复制/粘贴链接? 技术上这是在 php 中,但我正在尝试获取适当的静态谷歌地图链接,例如:“maps.googleapis.com/maps/api/…”; 对不起,我没有做足够的研究。显然,如果您不指定缩放或中心,但在地图上包含标记,谷歌静态地图将适合您 见问题***.com/questions/6048975/… - 它似乎有如何手动执行此操作的答案。【参考方案2】:

我在 11、12 和 13 级拍摄了 3 张静态地图,并使用了谷歌地图的“地图实验室”功能,在相应的最小/最大纬度/经度标记处按住 shift 键。然后我编写了一个 Perl 程序来计算纬度/经度范围、预期值(使用我通过检查数据预测的公式)和增量(即 abs(expected - range)),应该接近于零。 一旦我确信我已经尽可能接近了,我的结果如下:

Z11:  LatRange[0.323999]  ExpLat[ 0.324]  DeltaLat[  0.0000000000000019]
Z11:  LonRange[0.439999]  ExpLon[  0.44]  DeltaLon[  0.0000000000000023]

Z12:  LatRange[0.161999]  ExpLat[ 0.162]  DeltaLat[  0.0000000000000010]
Z12:  LonRange[0.219999]  ExpLon[  0.22]  DeltaLon[  0.0000000000000011]

Z13:  LatRange[0.081000]  ExpLat[ 0.081]  DeltaLat[  0.0000000000000031]
Z13:  LonRange[0.109999]  ExpLon[  0.11]  DeltaLon[  0.0000000000000006]

我使用的公式是:

ExpLat = 0.162 * (2 ** (12 - Z))
ExpLon = 0.220 * (2 ** (12 - Z))

其中 ExpLat、ExpLon 是预期的经纬度范围,Z 是缩放级别。

【讨论】:

以上是关于如何计算适当的谷歌地图缩放级别的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌地图中设置缩放级别

无论如何在谷歌地图上计算英里或米到像素以计算缩放级别?

在 setZoom 之后检测可见的谷歌地图标记

如何设置谷歌地图缩放级别以显示所有标记?

如何在android中根据谷歌地图不同的缩放级别调整谷歌地图标记的大小

如何在谷歌地图中找到当前的缩放级别?