GeoWebCache配置方法
目录
1、环境
Java7 + Tomcat8.0.20 + GeoServer2.7.6(war版) + GeoWebCache1.7.4(GeoServer集成)
2、GeoWebCache配置
2.1
修改%CATALINA_HOME%/webapps/geoserver/WEB-INF/web.xml文件内容:
添加如下代码:
<context-param>
<param-name>GEOSERVER_CACHE_DIR</param-name>
<param-value>你的GeoWebCache缓存目录</param-value>
</context-param>
2.2
重启GeoServer
可以通过Tomcat的Manager GUI重启GeoServer。成功后可以在2.1设置的GeoWebCache缓存目录下看到几个文件(夹),其中有一个文件叫geowebcache.xml,说明设置成功。
2.3
在Caching Defaults中勾选Enable direct integration with GeoServer WMS选项并保存。这样我们就可以使用常规的WMS请求访问GeoWebCache中的缓存图片。(可参考官方文档)
勾选后,还需要满足以下每个条件才能正常使用GWC,这里引用官方文档原文:
When this feature is enabled, GeoServer WMS will cache and retrieve tiles from GeoWebCache (via a GetMap request) only ifall of the following criteria are followed:
1、WMS Direct integration is enabled (you can set this on the Caching defaults page)
2、tiled=true
is included in the request
3、The request only references a single layer
4、Caching is enabled for that layer
5、The image requested is of the same height and width as the size saved in the layer configuration
6、The requested CRS matches one of the available tile layer gridsets
7、The image requested lines up with the existing grid bounds
8、A parameter is included for which there is a corresponding Parameter Filter
条件1:已经符合;
条件2:在发送GetMap请求的时候需要带上条件:tiled=true。例如使用OpenLayers发送请求时
new ol.source.TileWMS({
url: wmsUrl,
params: {
LAYERS: LAYERS,
VERSION: '1.1.0',
CQL_FILTER: filterStr,
VIEWPARAMS: viewParamsStr,
STYLES: layinfo[index].style,
TILED: true
}
,});
条件3:只能请求单独一个图层;
条件4:请求的图层必须已经启用了Cache功能:
条件5:请求的width和height参数必须和图层的配置相同。GeoServer的默认width和height都是256,若用户传入了自定义的width和height,则必须对图层进行相应的配置:
默认的,GeoServer提供了EPSG:900913和PESG:4326两个Gridset:
在Caching defaults页面最下面会看到Gridset的配置:
可以看到Tile Dimemsions都是256*256。若用户想自定义Gridset,可以通过添加gridset进行配置,然后在图层的编辑页面添加自定义的gridset:
条件6:请求的CRS(或者SRS)必须在图层可用的Gridset中,默认的有EPSG:900913, EPSG:4326。
条件7:请求的图层范围必须在Gridset范围内:
条件8:若请求包含参数,则该参数必须存在相应的Parameter Filter。这个条件比较难理解。
GeoWebCache支持的参数有:
举个例子,看下面这个OpenLayers的GetMap请求:
var source = new ol.source.TileWMS({
url: 'http://127.0.0.1:8088/geoserver/wms?',
params: {
SERVICE:'WMS',
LAYERS: 'wireless:view_basic_building',
STYLES:'wireless:test_grassFill',
CQL_FILTER: "cityid='320100'",
VIEWPARAMS: 'cityid:320100',
tiled: 'true',
}
});
该请求中包含列CQL_FILTER和VIEWPARAMS两个参数(注意大写!),那么,对应的,在请求的图层wireless:view_basic_building中,必须有针对这两个参数的Parameter Filter!注意!每个参数都要配置!看下面:
该页面总共有三个Parameter Filters。其中Styles是GeoServer默认添加的,稍后讨论。CQL_FILTER和VIEWPARAMS都设置了相应的过滤器。其中CQL_FILTER的过滤器是正则表达式,VIEWPARAMS是Strings的形式。只有满足所有这些条件的GetMap请求才会触发GWC机制!再回头看我们传入的参数:CQL_FILTER:“cityid=’320100’”以及VIEWPARAMS:’cityid:320100’。OpenLayers会主动将最外面的引号处理掉,因此每个参数都是符合Parameter Filters配置的。当GetMap请求未传入相应的参数时,GWC会使用默认值。例如用户请求时没有VIEWPARAMS参数,则GWC会自动使用cityid:120100作为默认值。然而,若用户传入的参数不符合对应的Parameter Filter,例如VIEWPARAMS:cityid:00000,则GWC不被触发,请求不会经过GWC,直接发到GeoServer,从服务器请求数据。
再解释一下styles。若该图层启用了Cache功能,则默认的会有STYLES这个Parameter Filters参数,与其他参数类似,也有默认值和可选值。若一个图层会用到多种styles,则这些styles必须首先添加在该图层的可选范围之内:
然后这些styles就会出现在alternate Styles中。用户可以根据需要选择要缓存的styles,或者是缓存所有styles。
Tips:
1、GeoWebCache相当于客户端和地图服务器中间的一个代理,当GeoWebCache中存在请求的缓存图片时,就不用再向地图服务器(如geoserver)发送请求了,这不仅能省带宽,还能提高响应速度:
2、在使用OpenLayers进行GetMap请求时,若有引号嵌套的情况,则必须是外面双引号,里面单引号,不然GeoServer不识别。
3、判断是否触发缓存,可以打开浏览器的调试器(例如Firebug等),在网络页面会看到wms请求,点击该请求,详细信息的响应头里应该有GWC的相关内容(若没有,说明根本没启用GWC功能,看看是不是tiled=true没写):
可以看到geowebcache-cache-result是HIT,说明GWC机制起了作用,在CACHE文件夹中找到了相应的缓存图片。其他情况,可参考官方文档。
4、缓存的图片可以设置过期时间。这对于动态地图的缓存有帮助:
默认值是0,即永不更新(除非用户手动更新)。这会导致,当用户发送WMS请求,GWC生成缓存瓦片,之后用户使用WFS服务编辑图层要素后,再使用WMS服务请求瓦片,GWC还是会返回之前已经缓存的瓦片。而GWC缓存的是过期的瓦片,用户是看不到编辑后的地图的。为避免该情况的发生,可以根据需要设置Expire参数。如20,意味着20秒后切片失效,再有WMS请求,GWC会从服务器获取新的瓦片。
转载自:https://blog.csdn.net/a20100997/article/details/80118181