地图瓦片文件的组织形式
原理
地图瓦片的基本原理:
1.每个瓦片文件大小为256*256像素。
2.地图的最小级别是0,这时候,整个世界地图是一张瓦片。根据Web-Mercator投影公式,经度[-180°,180°],纬度[-85.051129°, 85.051129°]区间的数据被投影在一个256*256像素的正方形图片上。
Web墨卡托投影(英文名为Web mercator)坐标系,广泛应用与Google Map、Bing Map等电子地图投影中。它以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。
谷歌瓦片地图规范坐标原点为东经180°,北纬85.05°,x轴向右,y轴向下。
3.级别越大,组成世界地图的瓦片数越多,可以展示的地图内容越详细。
4.某一级别下的地图瓦片是由它的上一层级的各瓦片切割成的4个瓦片组成,形成了瓦片金字塔。
5.瓦片通常都是png、tiff格式的,命名格式通常为z/x/y.png(.tiff)。
瓦片编号规则的不同流派
瓦片生成后,就是一堆图片。怎么对这堆图片进行编号,是目前主流互联网地图商分歧最大的地方。总结起来分为四个流派:
- 谷歌XYZ:Z表示缩放层级,Z=zoom;XY的原点在左上角,X从左向右,Y从上向下。
- TMS:开源产品的标准,Z的定义与谷歌相同;XY的原点在左下角,X从左向右,Y从下向上。
- QuadTree:微软Bing地图使用的编码规范,Z的定义与谷歌相同,同一层级的瓦片不用XY两个维度表示,而只用一个整数表示,该整数服从四叉树编码规则
- 百度XYZ:Z从1开始,在最高级就把地图分为四块瓦片;XY的原点在经度为0纬度位0的位置,X从左向右,Y从下向上。
注意:以下讲解图片,命名格式为 z/y/x。
图片来自:https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}
0层:
0/0/0
1层:
将上图切割为
1/0/0 1/0/1 1/1/0 1/1/1
2层:
将上述4张图分别切割为
2/0/0 2/0/1 2/1/0 2/1/1
2/0/2 2/0/3 2/1/2 2/1/3
2/2/0 2/2/1 2/3/0 2/3/1
2/2/2 2/2/3 2/3/2 2/3/3
形成如下图形:
3层:
如下图示:
每一层的X、Y坐标最大值为 2^(level)-1,经纬度坐标(lng,lat)转瓦片坐标(tileX,tileY)的公式如下:
tileX=int( (lng+180)/360*2^z)
tileY=(1- arsinh(tan(lat*π/180))/π) *2^(z-1)
其中反双曲正弦函数arsinh(x),等价于ln(x+(x^2+1)^0.5)。
瓦片坐标(tileX,tileY)转经纬度坐标(lng,lat)公式,计算结果为该瓦片对应的最小经度和最大纬度:
lng=tileX/2^z * 360-180
lat=arctan(sinh(π*(1-2*tileY/2^z)))*180/π
其中,双曲函数sinh(x)=(e^x-e^(-x))*0.5。
关于坐标转换,可参见:https://blog.csdn.net/sinat_41310868/article/details/115561425
每一层的图片数量如下:
层 | count(x)or count(y) | x^2 |
1 | 1.00 | 1.00 |
2 | 2.00 | 4.00 |
3 | 4.00 | 16.00 |
4 | 8.00 | 64.00 |
5 | 16.00 | 256.00 |
6 | 32.00 | 1,024.00 |
7 | 64.00 | 4,096.00 |
8 | 128.00 | 16,384.00 |
9 | 256.00 | 65,536.00 |
10 | 512.00 | 262,144.00 |
11 | 1,024.00 | 1,048,576.00 |
12 | 2,048.00 | 4,194,304.00 |
13 | 4,096.00 | 16,777,216.00 |
14 | 8,192.00 | 67,108,864.00 |
15 | 16,384.00 | 268,435,456.00 |
16 | 32,768.00 | 1,073,741,824.00 |
17 | 65,536.00 | 4,294,967,296.00 |
18 | 131,072.00 | 17,179,869,184.00 |
19 | 262,144.00 | 68,719,476,736.00 |