目录
一、WMTS简介
二、WMTS的接口
2.1、GetCapabilities
2.2、GetTile
2.3、GetFeatureInfo
三、加载ArcGIS产品发布的WMTS服务数据
3.1、加载ArcGIS Online发布的WMTS服务数据
3.2、加载ArcGIS Server发布的WMTS服务数据
四、加载GeoServer发布的WMTS服务数据
五、加载天地图的WMTS服务数据
六、总结
WMTS,即Web地图瓦片服务(Web Map Tile Service),由OGC(开放地理信息联盟)制定。根据WMTS标准,可以使我们轻松的访问瓦片数据。
WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案,它最重要的特征是采用瓦片缓存技术缓解WebGIS服务器端数据处理的压力,提高前后端交互响应速度。
WMS(Web地图服务)提供可定制地图的服务,是一个动态数据或用户定制地图(需结合SLD-Style Layer Descriptor)的理想解决方法。例如,可以在GeoServer中通过修改SLD样式文件来随时自定义地图样式:
随时都可以修改,而且一修改在客户端就能实时渲染出变化。根本原因是WMS的地图数据并没有通过切片放置到硬盘中,它的地图数据是实时处理并传输到客户端的。
而WMTS标准需要地图数据切片后放置在硬盘中,然后再调用数据传输到客户端。
WMTS牺牲了提供定制地图的灵活性,代之以通过提供静态数据(瓦片地图)来增强伸缩性,这些静态数据的范围框和比例尺被限定在瓦片坐标系中。这些固定的瓦片地图数据集使得对WMTS服务的实现可以使用一个仅简单返回已有文件的Web服务器即可,同时使得可以利用一些标准诸如分布式缓存的网络机制实现伸缩性。
WMTS服务支持RESTful访问,其接口包括:
GetCapabilities操作的参数:
示例:
ArcGIS Online发布的美国地图WMTS服务的基地址是:
http://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_Density/MapServer/WMTS/
那么要查询它的元数据,就可以使用以下URL:
http://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_Density/MapServer/WMTS/?Service=GetCapabilities
查询结果如下所示(节选):
GetTile的参数:
示例:
要查询以上ArcGIS Online发布的美国地图WMTS服务的层级为4,列号为3,行号为5的一块瓦片,可以这样请求:
http://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_Density/MapServer/WMTS/?tilematrixset=EPSG%3A3857&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix=4&TileCol=3&TileRow=5
请求结果:
GetFeatureInfo的参数:
查询要素信息一般使用OGC的WFS(Web Feature Service),所以就不详细介绍WMTS的GetFeatureInfo这个接口了
ArcGIS Online中的美国地图的WMTS服务基地址为:
http://services.arcgisonline.com/arcgis/rest/services/Demographics/USA_Population_Density/MapServer/WMTS/
可以使用OpenLayers中的ol.layer.Tile类 + ol.source.WMTS类来加载WMTS服务数据。
效果:
代码:
加载ArcGIS Online发布的WMTS服务数据
可以发现并不是那么容易,需要我们自己定义瓦片坐标系,也就是自定义初始化ol.tilegrid.WMTS类。
关键的地方就是生成分辨率resolutions,即首先得到Web墨卡托投影坐标系的宽度值(单位米),然后除以瓦片坐标系对应层级的瓦片总宽度就得到对应层级的分辨率了。前面的文章也都讲过相关的原理。
我这里使用ArcGIS Server发布了广东省路网shp数据,其WMTS基地址为:
https://localhost:6443/arcgis/rest/services/gd_roads/MapServer/WMTS
效果:
代码:
加载ArcGIS Server发布的WMTS服务数据
一个经验之谈就是:如果加载失败,请先检查参数是否与WMTS GetCapabilities文档里的参数一致,一定要严格一致!
GeoServer同样也支持WMTS标准,使用OpenLayers同样也能加载GeoServer发布的WMTS服务数据。
我这里使用GeoServer发布了广东省路网shp数据,其WMTS基地址为:
http://localhost:8080/geoserver/gwc/service/wmts
效果:
代码:
加载GeoServer发布的WMTS服务数据
这里需要注意的是matrixId的格式为EPSG:900913:z,而不再是和上面一样单纯的数字了。
天地图的大部分地理数据都是依据WMTS规范发布:
现在来加载天地图发布的影像底图:
效果:
源代码:
加载天地图发布的WMTS影像服务数据
以后开发就可以基于WMTS规范来加载天地图的各种底图了,非常方便!
其实掌握加载WMTS服务数据非常简单,就是首先要基于WMTS服务的基地址查询对应的元数据,然后根据元数据文档里写的参数去请求瓦片数据就好了。
关键就是参数要正确!