如何计算Leaflet中的Tiles坐标来请求TMS服务器?
How to Calculate Tiles Coordinates in Leaflet to Request TMS Server?
为了缓存瓦片供离线使用,我尝试根据一定的缩放级别计算瓦片坐标。计算出的 x 坐标正确,但 y 坐标不正确。
此 Old example 将实际接收到的坐标与计算出的坐标进行比较。 (点击地图显示结果)
我使用 map.project(latlng,zoom) 获取投影坐标,然后除以 tileSize,即 256。这种方法是否正确?
编辑:
感谢 Ivan Sanchez 对 TMS 中 y 反转的定位。实际上,在用 map.project(latlng,zoom) 投影点后,您需要反转 y 坐标,如下所示:
- 你计算对应缩放级别的_globalTileRange(zoom),然后
- InvertedY = _globalTileRange(zoom).max.y - y ;
这是另一个 Link,显示了针对当前地图缩放比例正确计算 y 坐标,对于其他缩放级别,需要相应地重新计算 globalTileRange。
此致,
你的做法是正确的。 然而:
为了获得 Leaflet 加载的图块坐标,您循环遍历所有加载的图像并输出这些值的 min/max。
这种方法的问题是 Leaflet 不会立即卸载 off-screen tiles。见 keepBuffer
option, bug #4039 and PR #4650.
为了获取地图边界内可见的图块边界,请参阅 L.GridLayer
在 this line of code 附近内部使用的私有方法。
在 TMS 中,y
坐标向上,在 non-TMS 方块中它向下。这是因为 TMS 是由地理学家完成的,其中 y
坐标是 northing,而 non-TMS 瓷砖最初是由计算机程序员完成的,他们将 y
坐标解释为向下像素.
有关更多背景信息,请阅读 https://wiki.openstreetmap.org/wiki/TMS#The_Y_coordinate and https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#TileMap_Diagram and https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#X_and_Y
为了缓存瓦片供离线使用,我尝试根据一定的缩放级别计算瓦片坐标。计算出的 x 坐标正确,但 y 坐标不正确。
此 Old example 将实际接收到的坐标与计算出的坐标进行比较。 (点击地图显示结果)
我使用 map.project(latlng,zoom) 获取投影坐标,然后除以 tileSize,即 256。这种方法是否正确?
编辑: 感谢 Ivan Sanchez 对 TMS 中 y 反转的定位。实际上,在用 map.project(latlng,zoom) 投影点后,您需要反转 y 坐标,如下所示:
- 你计算对应缩放级别的_globalTileRange(zoom),然后
- InvertedY = _globalTileRange(zoom).max.y - y ;
这是另一个 Link,显示了针对当前地图缩放比例正确计算 y 坐标,对于其他缩放级别,需要相应地重新计算 globalTileRange。
此致,
你的做法是正确的。 然而:
为了获得 Leaflet 加载的图块坐标,您循环遍历所有加载的图像并输出这些值的 min/max。
这种方法的问题是 Leaflet 不会立即卸载 off-screen tiles。见
keepBuffer
option, bug #4039 and PR #4650.为了获取地图边界内可见的图块边界,请参阅
L.GridLayer
在 this line of code 附近内部使用的私有方法。在 TMS 中,
y
坐标向上,在 non-TMS 方块中它向下。这是因为 TMS 是由地理学家完成的,其中y
坐标是 northing,而 non-TMS 瓷砖最初是由计算机程序员完成的,他们将y
坐标解释为向下像素.有关更多背景信息,请阅读 https://wiki.openstreetmap.org/wiki/TMS#The_Y_coordinate and https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#TileMap_Diagram and https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#X_and_Y