1

我正在尝试使用简单的 Web 服务 API 从 Google 地图中检索一组静态地图图块。

对于只有一个图块的缩放级别 0,我只需将中心指定为 (0,0),这很简单。(是的,我知道,南北范围仅为 [-85.05113°,85.05113°] 即我已阅读有关墨卡托投影的信息(不仅是维基百科的文章)。

因此,对于具有 2×2 瓦片的缩放级别 1,我知道认为瓦片的中心坐标为(±90,±45)是天真的。我应用了上面文章“墨卡托投影的推导”部分中列出的功能之一。在 PHP 中,这看起来像

function mercor($aLat) {
  return rad2deg(asinh(tan(deg2rad($aLat))));
}

当传入 45 时,它总是返回 50.498987。我尝试了几个替代表达式 :-) 确实,结果都相同,甚至使用专用计算器检查了该值。

无论如何,这个值显然是不正确的,正如你在这里看到的(它应该显示地球地图的西北象限,但这里赤道向北移动)(图片来源):

在此处输入图像描述

通过反复试验,我发现正确的值接近 66.65,但我不知道如何计算。我尝试了对R提到的“墨卡托投影的推导”部分中的表达式中显示的因子的几种操作,并且还摆弄了同一文档中描述的“比例因子”,但无论我做什么,我都没有接近 66.65 .

在这里您可以看到 66.65 是(接近)正确值,赤道位于底部边缘(图像源):

在此处输入图像描述

并采取一个例子,例如(图像源):

而像kruler这样的工具,也很明显应该是66.65。

因此,任何想法将不胜感激。提前致谢...

(目前我正在尝试使用 HTML 文档,因为它相对简单,但后来我想在无法调用 JavaScript 的环境中进行。所以 JavaScript API 不是一个选项。)

4

1 回答 1

0

我准备了一个网站,描述了在谷歌地图、OSM 和类似的滑动地图背后使用的流行平铺系统。看一下:

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

单击交互式地图,您会收到以墨卡托坐标(以米为单位)以及 WGS84 纬度/经度(以大地度为单位)计算的边界。

在页面下方,您会找到一个开源 python 代码(同时已被其他人移植到其他编程语言)。这包含您可能需要的所有数学的书面描述。

事实上,我在为 GDAL2Tiles/MapTiler 项目为 Google SoC 工作后创建了此资源 - 该项目已重新实现为 C/C++ 并得到显着改进,现在可通过http://www.maptiler.com/获得。

更新:如果您想使用 Google Maps Static API 请求,您可能会发现我准备的另一个有用的在线工具:http: //www.maptiler.org/photoshop-google-maps-overlay-tiles/。随意查看 JavaScript 源代码。

于 2013-09-08T22:14:22.243 回答