我正在尝试使用简单的Web服务API从Google地图中检索一组静态地图图块。
对于缩放级别0,只有一个图块,我只需将中心指定为(0,0),这是微不足道的。 (是的,我知道,南北范围是[-85.05113°,85.05113°] 只有,即我读过Mercator projection(不仅仅是维基百科的文章)。
因此,对于具有2×2个瓦片的缩放级别1,我知道认为瓦片的中心坐标将是(±90,±45)是天真的。我应用了上面文章“Derivation of the Mercator projection”部分中列出的一个功能。在PHP中,这看起来像
function mercor($aLat) {
return rad2deg(asinh(tan(deg2rad($aLat))));
}
在传入45时总是返回50.498987.我尝试了几个替代表达式:-)所有具有相同结果,确实,甚至用专用计算器检查了该值。
无论如何,这个值显然是不正确的,正如你在这里看到的那样( 应该显示地球地图的西北象限,但这里的赤道是移位向北)(image source):
通过反复试验,我发现正确的值接近66.65,但我不知道如何计算。我尝试了几次对“墨卡托投影的推导”部分中的表达式中显示的R
因子的操作,并且还摆弄了同一文档中描述的“比例因子”,但无论我做什么,我都做不接近66.65。
在这里你可以看到66.65是(接近)正确的值,底边的赤道(image source):
并举例说明(image source):
和像kruler这样的工具,显然它应该是66.65。
所以,任何想法都会非常感激。提前谢谢......
(目前我正在尝试使用HTML文档,因为它相对简单,但后来我想在一个我无法调用JavaScript的环境中这样做。所以JavaScript API不是一个选项。)
答案 0 :(得分: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源代码。