地图的开发研究–基于openlayers+geoserver+tomcat的离线地图-geoserver的缓存机制(geowebcache)
Geowebcache服务器拦截来至客户端的请求,判断本次请求的数据是否已经被缓存。如果请求数据已被缓存,则将这些缓存图片直接渲染至客户端;如果请求数据没有被缓存,则发送请求至WMS Server(提供网络地图服务的服务器如geoserver),由服务器处理请求数据,并返回给Geowebcache服务器,Geowebcache服务器进过渲染及缓存数据图片后绘制到客户端。
最新的geoserver其实已经内置了Geowebcache,所以不需要再添加Geowebcache服务器,这其实很方便的。因为目前地图数据不是很大,仅仅实现的是中国地图的切片,缓存的瓦片大小才1.6G左右,不过如果数据量更大的地图,存储问题还是需要关心。Geoserver由于内置geowebcache,在我们创建图层的时候会默认帮我们建立瓦片图层,以供我们来进行切片,我们所要做的就是启用切片,进行切片的设置,然后缓存到本地,经过测试的时候地图放大或缩小的时候地图加载速度提高。
更改E:\software\apache-tomcat-6.0.18\webapps\geoserver\WEB-INF\web.xml 添加以下代码,重启tomcat,开始切片:
<context-param>
<param-name>GEOWEBCACHE_CACHE_DIR</param-name>
<param-value>D:\geowebcache</param-value>
</context-param>
进入geoserver配置界面:
Geoserver的内置geowebcache
待切片图层:
切片配置界面,设置切片的线程(不能太大,不然PC吃不消),其中bouding box 表示需要进行切片的范围,如果仅仅需要切片中国地图,就使用中国地图的BBOX,前几周小结描述过:
创建2个线程进行自动切片:
所以等待一段时间后,会发现D:\geowebcache出现的图层的瓦片缓存,一个一个256X256的图片
其中文件命名格式和谷歌的编码类似:
EPSG_投影编码_比例尺级别\行号_列号.png
第一行行号为00,列号00,命名规则如下所示:
JS调用:
var geoServer_url="http://192.168.1.100:8080/geoserver";//局域网内的地图服务器
var options = {
controls : [],
maxExtend:new OpenLayers.Bounds(
73.44696044921875, 6.318641185760498,
135.08583068847656, 53.557926177978516
),
resolutions: [0.087890625, 0.0439453125, 0.02197265625], //比例尺级别。如果缓存文件不存在,将根据此级别生成瓦片
minResolution : 0.087890625,
maxResolution : 0.02197265625,
projection : "EPSG:4326",
units : 'degrees'
};
tiled = new OpenLayers.Layer.WMS("GIS:beijing_area - Tiled",geoServer_url+"/gwc/service/wms",
//正常图层
//tiled = new OpenLayers.Layer.WMS("GIS:beijing_area - Tiled",geoServer_url+"/wms",
{
LAYERS : 'mytest:bou2_4p',
STYLES : '',
format: 'image/png',
tiled : true
}, {
buffer : 0,
displayOutsideMaxExtent : true,
isBaseLayer : true,
yx : {
'EPSG:4326' : true
}
});
map = new OpenLayers.Map('map', options);
map.addLayers([ tiled]);
其实可以看出调用方式其实和以前的服务端调用类似,不过是换了个url地址,其实更深入的使用瓦片服务可以使用TMS服务,根据瓦片命名规则,计算地图界面的坐标,调用相应的瓦片。大家可以自己研究下,很有作用,因为如果要调用几大在线地图的瓦片的时候需要使用。
转载自:https://blog.csdn.net/songjian1314/article/details/17297607