如何从经纬度找出地图瓦片坐标?

问题描述 投票:0回答:3

我正在使用 Mapbox 矢量切片从后端进程收集特定数据。 在示例中,他们提供了曼哈顿图块的链接:

http://a.tiles.mapbox.com/v3/examples.map-zr0njcqy/14/4823/6160.png

是图块 z/x/y 坐标 14/4823/6160

通过导航地图,我知道纬度 40.706119 和经度 -74.017554 的位置位于该图块内。

我还从地图如何工作中推断出,使用缩放 14 时,整个地图由 16384 x 16384 个图块组成,即左上角图块 14/0/0。

然而,将 180 度纬度和 360 度经度与总图块列数和行数计算得出 14/7464/4486,这不是同一个图块。 (除非我没做对?)

问题

如何获取知道纬度和经度的图块坐标?

mapbox
3个回答
6
投票

在mapbox-studio源代码中挖掘我发现了这个小辅助对象:

https://github.com/mapbox/mapbox-studio/blob/5ac2ead1e523b24c8b8ad8655babb66389166e87/ext/sphericalmercator.js

可以这样使用:

> var a = new SphericalMercator()
> a.xyz([-74.017554, 40.706119], 14)
Object { minX: 4823, minY: NaN, maxX: NaN, maxY: 6160 }

14/4823/6160


5
投票

您可以使用以下功能:

    def deg2num(lat_deg, lon_deg, zoom):
      lat_rad = math.radians(lat_deg)
      n = 2.0 ** zoom
      xtile = int((lon_deg + 180.0) / 360.0 * n)
      ytile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)
      return (xtile, ytile)

以上是python的实现。您可以检查Slippy map lat/long totile number以获取实施细节和说明。


0
投票

使用mercantile python库将mapbox xyz瓦片转换为坐标

https://github.com/mapbox/mercantile

示例

对于那块瓷砖 https://api.tiles.mapbox.com/v4/mapbox.satellite/18/150973/100697.png

import mercantile
mercantile.ul(150973, 100697, 18)
"LngLat(lng=-9.140625, lat=53.33087298301705)"
© www.soinside.com 2019 - 2024. All rights reserved.