TMS服务和Google tile瓦片组织方式
TMS(瓦片地图服务,全称Tile Map Service),是开源空间信息基金会(Open Source Geospatial Foundation,简称OSGeo)定义的瓦片地图服务,与开放地理空间信息联盟(Open Geospatial Consortium,简称OGC)定义的WMTS(Web Map Tile Service)是不同的。
本文介绍TMS中的瓦片组织方式以及与Google tile的区别。
1.投影坐标系
在介绍瓦片组织之前,简单介绍一种投影坐标系:web Mercator坐标系,是WGS84坐标系通过伪墨卡托投影生成的投影坐标系,编号为EPSG:3857或OSGEO:41001。这种投影坐标系广泛应用于Google Maps, OpenStreetMap, Bing, ArcGIS, ESRI等的渲染地图中,投影示意图如图所示,图片来源:https://blog.csdn.net/wt346326775/article/details/84255029。
以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。
X轴:由于赤道半径为6378137米,则赤道周长为2PIr = 2×20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。
y轴:本来纬度接近90度的时候,y轴是接近无限,但是为了在web上好计算,y轴的取值范围也定为了[-20037508.3427892,20037508.3427892] 。
由上面的x轴和y轴的取值范围,反计算得到经纬度的取值范围为:
经度: [-180,180]
纬度: [-85.05112877980659,85.05112877980659]
因此,地球通过web Mercator投影之后是个正方形。
2.TMS瓦片的组织方式
网上很多关于TMS瓦片组织方式介绍,基本都是四叉树分割,但其实TMS瓦片常用组织方式还有另一种,下面介绍这两种方式。
2.1 四叉树分割
这里主要强调四叉树分割要求瓦片坐标系必须为webMocator投影坐标系,即编号为EPSG:3857或OSGEO:41001。因为要保证瓦片是正方形,而webMercator投影之后为正方形,适合四叉树。
坐标原点在左下角:
x:-20037508.3427892
y:-20037508.3427892
数量和层级关系如下表所示:
0 | 1 tile covers whole world | 1 tile |
---|---|---|
1 | 2 × 2 tiles | 4 tiles |
2 | 4 × 4 tiles | 16 tiles |
n | 2n × 2ntiles | 22n tiles |
12 | 4096 x 4096 tiles | 16.777.216 tiles |
16 | Maximum zoom for OpenCycleMap (mostly) | 232 = 4.294.967.296 tiles |
17 | Maximum zoom for Osmarender layer | 17.179.869.184 tiles |
18 | Maximum zoom for Mapnik layer | 68.719.476.736 tiles |
瓦片编号可参考https://rovertang.com/labs/tileindex/进行正反算。
瓦片计算公式:
n = 2 ^ zoom
xtile = ((lon_deg + 180) / 360) * n
ytile = (1 + (log(tan(lat_rad) + sec(lat_rad)) / π)) / 2 * n-1
在TMS地图服务中需要tilemapservice.xml对瓦片进行定义,如下图。特别需要注意坐标系编号,文件类型设置为global-mercator,以及其他一些设置。
2.2 0级先二分,后四叉树分割
TMS还有一种编码方式,这种编码方式需要瓦片坐标系为WGS84地理坐标系,它在0级将全球按照中央0°经线分为两块。其他级再进行四叉树分割。因为这样保证瓦片长宽比例尽量一致。
坐标原点在左下角:
x:-180
y:-90
数量和层级关系如下表所示:
0 | 2 tile covers whole world | 2 tile |
---|---|---|
1 | 4 × 2 tiles | 8 tiles |
2 | 8 × 4 tiles | 32 tiles |
n | 2*2n × 2ntiles | 2*22n tiles |
瓦片计算公式(若有问题,请指教):
n = 2 (zoom+1)
xtile = ((lon_deg + 180) / 360) * n
ytile=((lat_deg + 90) / 360)*n
同样,设置tilemapservice.xml对瓦片进行定义,如下图。特别需要注意坐标系编号,文件类型设置为global-geodetic,以及其他一些设置。
3.TMS与Google tile的区别
理解了tms,就很好理解Google tile瓦片组织方式,与2.1类似,坐标系为webMercator投影坐标系,瓦片组织方式只有一点不同,y轴方向上编码从上向下,即坐标原点为左上角。
google瓦片x编码与tms一致,y编码关系如下。
GoogleYtile=2zoom-TMSYtile-1
因此,通过该公式可以实现,Google tile与TMS的相互转换。