瓦片地图及其计算
2024-09-15 10:10:03
GIS
XYZ
MDX
什么是瓦片地图
瓦片地图(Tiled web map1)一种通过分块技术将大范围地图按固定大小的图像或数据块(称为“瓦片”)分割,方便地图在网络或其他应用中快速加载和显示的技术。
标准的切片 Web 地图的属性主要包括:
- 图块一般为 256x256 像素
- 最小层级 0 情况下,可以在单个地图图块中渲染整个世界
- 每个缩放级别在 XY 两个维度上都加倍,因此在放大时,单个图块将替换为 4 个图块
- 使用 Web Mercator 投影(EPSG:3857),纬度限制约为85°
切片方法
1.Google Maps / OpenStreetMap
大多数平铺 Web 地图都遵循某些 Google 地图惯例,事实上的 OpenStreetMap 标准,称为 Slippy Map Tilenames 或 XYZ.
原点坐标在左上角
2.Tile Map Service(TMS)
OpenLayers 的早期标准,与XYZ的区别是 y 轴在 TMS 中向北为正, 即原点在左下角.
可通过以下公式计算得到 XYZ 的 Y 值
js代码如下:
// 在编程语言中,左移运算较快
// y = Math.pow(2, z) - y - 1;
y = (1 << z) - y - 1;
参考阅读: The difference between XYZ and TMS tiles and how to convert between them (github.com)
3.QuadTrees
Bing Map 使用 Quadkeys 进行寻址2。
缩放级别
缩放级别(zoom)一般为 0~18,zoom level 为 0 时,需要 1 张瓦片,zoom level 为 n 时,需要 张瓦片
一般地图服务商提供地图的最大分辨率为亚米级,18 级时影像分辨率为 0.5972m,所以 zoom 一般为18.
Openlayer 提供了调试瓦片,可以显示每个瓦片的坐标3:
瓦片编号的计算
可根据以下公式计算4:
根据经纬度计算其所在瓦片编号
经度(Longitude):
纬度(Latitude):
缩放级别(Zoom):
x=211
y=100
根据瓦片 XY 和 ZOOM 计算经纬度
X:
Y:
Z:
瓦片西北(左上)角的坐标(经度、纬度)为: 116.718750
36.597889
相关参考资料
OpenLayers 3 Primer - 瓦片计算
flutter_map的 Demo: Tile Builder