WMTS规定使用瓦片矩阵集(Tile Matrix Set)来表示切割后的地图,如图1所示,不同瓦片矩阵具有不同的比例尺(分辨率),每个瓦片矩阵由瓦片矩阵标识符(一般为瓦片矩阵的序号,分辨率最低的一层为第0层,依次向上排)进行标识。
一、元数据能力文档(Capacity.xml)
示例链接:
https://diffmap.zggyd.com/iserver/services/map-ecology/wmts100?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.0.0
元数据能力文档的主要内容在于content节点,因此主要介绍该节点下的数据结构的含义。
完整的解释可参考:OpenGIS Web 地图切片服务实施标准 - 开放地理空间联盟 (ogc.org)
1.Layer节点
1)Title跟Identifier:图层地图名与标识符
一系列的Boundingbox:图层地图范围(在不同的坐标系下的)
Style: 图层的样式
ormat:F缓存图片格式
TileMatrixSetLink:比例尺集合的链接,这部分只提供比例尺集合的标识符,然后需要到TileMatrixSet中去索引到对应的比例尺集合。
ResourceURL:获取瓦片图片的url地址模板
2)TileMatrixSetLink中还包含了TileMatrixSetLimits,TileMatrixSetLimits会对其对应的比例尺集合做限制以减少不必要的资源加载和浪费。
2.TileMatrixSet节点
1)基本参数介绍
首先是要了解一下TileMatrixSet节点中各个参数的含义。需要注意的是WMTS中以左上角为原点,向下方向为Y轴正向(由北向南),向右方向为X轴正向(由西向东)。
瓦片矩阵中的每个瓦片由瓦片的行列号来标识,行列号分别从瓦片矩阵左上角点所在的瓦片开始算起,起始行列值是(0,0),依次向下向右增加,如上图所示,也就是取瓦片的索引号。
Identifier:这个瓦片阵列的 ID
TopLeftCorner:这个瓦片的左上角位置,此处是经纬度表达(基于 EPSG:4326 坐标系)
TileWidth、TileHeight:瓦片的像素长宽,即 256 × 256 像素
MatrixWidth、MatrixHeight:代表这一级瓦片横向纵向跨度有多少个瓦片
ScaleDenominator:比例尺分母(字面翻译,其值是一个像素代表的实际距离与像素尺寸(习惯以0.28mm标定)的比值)
2)相关计算思路
分辨率Resolution是指一个像素所代表的实际地面距离,单位米。WMTS 1.0.0是以像素大小0.28mm来标定的(这是一个经验值),即每英寸像素个数为0.00254/0.00028=90.71428571428571个(OGC WMTS规范中的数值)。
瓦片图片的分辨率怎么计算,以4326 切片第 0 级瓦片(256x256像素)阵列有 1 行 2 列为例,一个瓦片边长等同地球赤道的一半。地球周长以400750170m计算
一个像素代表的实际长度=(400750170/2)/256=782715.17578125m
下面可以计算
ScaleDenominator=782715.17578125/0.00028=2795411342.075893
有了ScaleDenominator,对于任意实际地表长度,我们可以计算其在屏幕上的长度。如果再已知像素大小(已知dpi),那么地表实际坐标(x, y)就可以计算出像素坐标了(当然,原点和轴向要定义好,TopLeftCorner正好用得到,定义原点了)
下面总结根据ScaleDenominator计算分辨率的公式
Resolution=(1inch/dpi)×0.0254m/inch ×ScaleDenominator
= (0.0254*ScaleDenominator)/dpi
设定x轴由西向东,原点坐标(x0, y0),瓦片大小tileSize,那么对于实际坐标(x, y),计算其在屏幕上的列坐标为
col=floor((x-x0)/(tileSzie*Resolution))
可见,知道了ScaleDenominator和显示设备的dpi就可以计算某个坐标点的屏幕坐标了。
注:关于dpi的相关说明
1英寸=0.0254米,一般假设一个像素的边长为0.28mm=0.00028米。
那么此时dpi=0.0254/0.00028=90.714
二、描述文档(description XML file)
描述文档可用于请求具体的图层的数据集。
GetCapabilitiesUrl:即请求的能力文档的链接
Layer:要获取的图层的表示
Style:要获取的图层的样式
TileMatrixSet:要获取的图层的比例尺集合
DataWindow:要获取的图层的包围盒
BandsCount:波段/通道数,1个用于灰度数据,3个用于RGB,4个用于RGBA。(可选,默认为4)
UnsafeSSL:一般使用https的时候把这个设为true
其他的标签为默认值即可。
三、一些问题和难点
1.天地图的dpi为96,这与常见的dpi不一致
2.选中图层的包围盒应当与其TileMatrixSet一致
四、其他
1.关于restful与kvp
Restful风格的链接:https://maps.wien.gv.at/basemap/1.0.0/WMTSCapabilities.xml
Kvp风格的链接:
https://opencache.statkart.no/gatekeeper/gk/gk.open_wmts?service=WMTS&request=GetCapabilities
参考:
1.WMTS -- OGC Web Map Tile Service — GDAL documentation
2.WMTS服务初步理解与读取_wmts-china-CSDN博客
3.WMTS服务中TileMatrix 与 ScaleDenominator的理解-CSDN博客
4.WebGIS教程 标准 WMTS服务初步理解与读取
5.https://www.cnblogs.com/oloroso/p/9553207.html
6.22. 使用OGC/ISO协议 — QGIS Documentation 文档