本章主要讲述如何GeoServer进行图层瓦片切割与缓冲,发布标准的WMTS服务,并介绍了REST格式的调用参数。主要包含以下内容:
- 图层切片与缓冲
- WMTS服务调用
在GeoServer入门(一):发布第一个图层中,利用GeoServer服务器发布了第一张WMS地图,并使用OpenLayers在浏览器中进行了预览和基本的平移和放大操作。细心的读者可能已经发现,每次鼠标操作时浏览器都会向后台服务器发送一个地图更新的请求,这在地图较小、访问量较少的情况下感觉还不太明显。但是,对于稍微大一点的GeoTIFF地图每次花费的时间就显得比较长了。一方面是因为GeoServer服务器每次请求都要根据WMS服务的参数来生成需要返回给浏览器的图像,当地理图像越大时这个过程花费的时间就会越长;另一方面也因为相同的图片生成过程在服务器端被不断的重复,即使已经访问过很多次了也会在下次WMS服务时重新生成,这样就做了很多的无用功,白白浪费了服务器的计算资源。如果能将以前生成过的地理图片缓存在服务器上,这个生成图像的过程就会急剧减少,将会大大减轻服务器的负担,提高服务的影响效率。幸好GeoServer已经内置了GeoWebCache服务,通过这个缓冲机制,可以将所有和图层提前切片保存,虽然从存储空间的角度来讲似乎有些浪费,但是从服务响应时间上来看却极大地提高了地图服务的响应效率。
1. 图层切片与缓冲
GeoServer已内置了GeoWebCache服务,可以直接在GeoServer的管理界面左侧的“Tile Caching”瓦片缓冲菜单栏中进行操作,可以对图层进行切片、设置默认缓冲参数、网格集、磁盘限额等。
(1)打开“切片图层”
点击“切片图层”功能菜单,即可打开“切片图层”页面。
这张页面列出了GeoServer服务器发布的所有图层,在“图层名称”列找到想要进行切片的图层,点击图层的名称打开“编辑图层”页面。
(2)编辑图层切片参数
这里打开的“编辑图层”与GeoServer入门(一):发布第一个图层中“添加新图层”时打开的“编辑图层”页面完全一样。在“Tile Caching”标签页中可以对图层切片参数进行设置。
这里列出的参数可以全部使用默认设置,特别要提到的是网格的设置,GeoWebCache默认使用EPSG:4326和EPSG:3875两种坐标系统来对图层进行切片,这两种坐标系统也是目前WebGIS应用中最为常用的坐标系,如果需要其他的坐标系可以在“Add grid subset”栏中选择添加。其中的放大级别可以先不用设置,在后面具体切片时可以重新设置需要缓冲的切片的缩放级别。
所有参数设置完成后,点“保存”按钮即可。
(3)切片任务
完成切片参数设置以后,就可以在“图层切片”页面中点击图层名称那一行的“Seed/Truncate”按键打开“创建切片任务”设置页面并后台完成切片工作。
在“建立切片任务”页面,可以对任务的数量、操作的类型、网格集合、瓦片图像格式、起止缩放级别等参数进行设置,如上图中就设置了使用6个线程来完成EPSG:4326网格的png瓦片切割任务,缩放级别从0级到18级等,最后点击“Submit”按钮即可后台开始上述的切片任务如下:
等到所有这些任务全部都完成后,切片工作就算是完成了,这时可在Tomcat的temp/geowebcache文件夹(Tomcat下war包部署方式,其他方式可相应查找)找到以这个图层名称命名的文件夹,在图层文件夹下列出了瓦片缩放等级为文件夹的多个瓦片目录,所有的瓦片图像就缓冲在这里:
这里出现的文件夹的名字很重要,把名称中的下划线换成冒号(:)后实际上就是很多前台地理空间数据可视化库中所需要用到的TileMatrixID。这时就可以使用客户端来测试一下WMTS服务和瓦片缓冲的实际效果了。
2 WMTS服务调用
在管理界面首页右侧的“服务能力”栏目中找到WMTS服务,点击下面“1.0.0”或者直接在浏览器地址栏中输入
http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=GetCapabilities
来查看GeoServer服务器当前发布的所有WMTS图层的参数情况。由于包含所有和发布图层,这个文件一般会比较长,可以通过搜索图层名称来快速找到该图层的切片情况。
从这个能力文件中可以看出,如果想要以png瓦片的形式访问这个图层,只需使用以下REST命令格式向GeoServer发送请求:
http://localhost:8080/map/gwc/service/wmts/rest/xian:satellite/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png
其中:
{style}为瓦片风格,在“创建切片任务”时一般会选择默认值为“raster”;
{TileMatrixSet}为瓦片集合名,“创建切片任务”时会选择“EPSG:4326”或“EPSG:900913”;
{TileMatrix}为瓦片矩阵名,相当于其他切片方法中的缩放层级。由于GeoWebCache同时支持多种网格的切片,所以这个参数的命名与常用的切片机制稍微有点区别。还记得在geowebcache中看到的文件夹的名字吗?这里的{TileMatrix}就是用冒号替换了下划线后的那个文件名。这个参数一般是由前台可视化库自动给出的,注意要能获得正确的缩放级别,如“EPSG:4326:10”就表示10级缩放。
{TileRow}为瓦片行编号,由前台可视化库自动给出;
{TileCol}为瓦片列编号,由前台可视化库自动给出。
明白了这几个参数的含义,就赶紧去找OpenLayers或者Cesium前台JavaScript库去试一下吧!