Geowebcache

简介

GeoWebCache(GWC)是一个采用Java实现用于缓存WMS(Web Map Service)Tile的开源项目。当地图客户端请求一张新地图和Tile时,GeoWebCache将拦截这些调用然后返回缓存过的Tiles。如果找不到缓存再调用服务器上的Tiles,从而提高地图展示的速度。实现更好的用户体验。
地图往往是静态的,由于大部分客户端每一次请求WMS(网络地图服务)的数据都被质疑,这会导致不必要的处理,增加等待时间。 GeoWebCache在他们请求的时候优化存储(缓存)地图瓦片,作为代理连接客户端(例如OpenLayers或谷歌地图)和服务器(如GeoServer,或任何WMS兼容的服务器)。随着新的地图和瓦片的请求,GeoWebCache拦截这些请求并预渲染瓦片,如果这些瓦片已经得到缓存。因此,一旦瓦片被存储,地图绘制速会度增加许多倍,实现更完美的用户体验。

实现原理

缓存机制

  缓存机制

Geowebcache服务器拦截来至客户端的请求,判断本次请求的数据是否已经被缓存。如果请求数据已被缓存,则将这些缓存图片直接渲染至客户端;如果请求数据没有被缓存,则发送请求至WMS Server(提供网络地图服务的服务器),由服务器处理请求数据,并返回给Geowebcache服务器,Geowebcache服务器进过渲染及缓存数据图片后绘制到客户端。
  

      下面说一下geowebcache的配置使用,这里使用的版本是:1.3-RC3,下载对应的war包,在tomcat中解压后,会在WEB-INF目录下找到一系列配置文件,先找到web.xml,然后在web-app根元素下添加:

1 <context-param>
2    <param-name>GEOWEBCACHE_CACHE_DIR</param-name>
3    <param-value>你的geowebcache切片的目录</param-value>
4   </context-param>
param-value的值就是你要存放geowebcache瓦片的位置,配置好这里,重启tomcat,你会发现在你的瓦片目录下生成了一些文件,其中就有geowebcache.xml,这个文件是geowebcache配置的关键所在,一下是这个文件的配置信息:

 

 

001 <?xml version="1.0" encoding="utf-8"?>
002 <gwcConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
003   xmlns="http://geowebcache.org/schema/1.3.0"
004   xsi:schemaLocation="http://geowebcache.org/schema/1.3.0 http://geowebcache.org/schema/1.3.0/geowebcache.xsd">
005   <version>1.3.0</version>
006   <backendTimeout>120</backendTimeout>
007   <serviceInformation>
008     <title>GeoWebCache</title>
009     <description>GeoWebCache is an advanced tile cache for WMS servers.It supports a large variety of protocols and
010       formats, including WMS-C, WMTS, KML, Google Maps and Virtual Earth.</description>
011     <keywords>
012       <string>WFS</string>
013       <string>WMS</string>
014       <string>WMTS</string>
015       <string>GEOWEBCACHE</string>
016     </keywords>
017     <serviceProvider>
018       <providerName>John Smith inc.</providerName>
019       <providerSite>http://www.example.com/</providerSite>
020       <serviceContact>
021         <individualName>John Smith</individualName>
022         <positionName>Geospatial Expert</positionName>
023         <addressType>Work</addressType>
024         <addressStreet>1 Bumpy St.</addressStreet>
025         <addressCity>Hobart</addressCity>
026         <addressAdministrativeArea>TAS</addressAdministrativeArea>
027         <addressPostalCode>7005</addressPostalCode>
028         <addressCountry>Australia</addressCountry>
029         <phoneNumber>+61 3 0000 0000</phoneNumber>
030         <faxNumber>+61 3 0000 0001</faxNumber>
031         <addressEmail>john.smith@example.com</addressEmail>
032       </serviceContact>
033     </serviceProvider>
034     <fees>NONE</fees>
035     <accessConstraints>NONE</accessConstraints>
036   </serviceInformation>
037    
038    
039 <!--下面定义的是瓦片格网的信息,主要配置投影名称,数据框(坐标范围),比例尺集合,瓦片大小,geowebcache会根据这些信息来分割地图-->
040   <gridSets>
041     <!-- Grid Set Example, by default EPSG:900913 and EPSG:4326 are defined -->
042  <gridSet>
043     <!--格网信息的名称,这里只是一个标识,可以随便起,下面配置wmsLayer的时候会用到-->
044     <name>EPSG:3395</name>
045     <!--这里对应的就是真正的投影名称了,要说明的是,geowebcache本身并不认得这些投影名称,因为地图数据是从地图服务器里来的,这些信息最终是要传到地图服务器中去的,所以这里只要和地图服务器中的投影名称一致就可以了-->
046     <srs><number>3395</number></srs>
047     <!--地图图层的坐标范围,也可以理解为,你需要切图的范围,可以不指定-->
048     <extent>
049       <coords>
050         <double>12063355.362599999</double>
051         <double>3248729.1457272936</double>
052         <double>13122908.970199998</double>
053         <double>3908502.2175705903</double>
054       </coords>
055     </extent>
056     <!--分辨率集合(也就是定义缩放的级别),一个像素点代表多少地图单位,和比例尺的意思一样,这里定义了11个缩放级别-->
057     <resolutions>
058       <double>1000.4406398437495</double>     
059       <double>517.3601599609374</double>     
060       <double>258.6800799804687</double>     
061       <double>129.34003999023435</double>   
062       <double>64.67001999511717</double>     
063       <double>32.335009997558586</double>     
064       <double>16.167504998779293</double>     
065       <double>8.083752499389647</double>     
066       <double>4.0104690624237058</double>     
067       <double>2.25261726560592646</double>     
068       <double>1.12630863280296323</double>
069     </resolutions
070     <!--字面理解,每个单位所代表的长度-->
071     <metersPerUnit>1</metersPerUnit
072     <pixelSize>0.0002645833333333333333333333</pixelSize>
073     <!--瓦片的长宽-->
074     <tileHeight>256</tileHeight>
075     <tileWidth>256</tileWidth>
076   </gridSet>
077   </gridSets>
078  
079   <layers>   
080     <wmsLayer>
081     <!--地图名称,这个会在openlayer调用的时候中用到-->
082       <name>heightway</name>
083       <metaInformation>
084         <title>heightway</title>
085         <description>heightway</description>
086       </metaInformation>
087       <!--图片格式-->
088       <mimeFormats>
089         <string>image/jpeg</string>
090       </mimeFormats>
091       <!-- 使用的瓦片格网,就是上面所配置的格网信息 -->
092       <gridSubsets>
093         <gridSubset>
094           <gridSetName>EPSG:3395</gridSetName>       
095         </gridSubset>
096       </gridSubsets>
097       <!--wms服务地址-->
098       <wmsUrl>
099         <string>http://localhost:8006/geoserver/cite/wms?service=WMS</string>
100       </wmsUrl>
101       <wmsLayers>cite:heightWay</wmsLayers>
102       <!--是否透明-->
103       <transparent>false</transparent>
104       <!--背景色-->
105       <bgColor>#FCFCFC</bgColor>
106     </wmsLayer>
107   </layers>
108    
109 </gwcConfiguration>

配置好上面的信息之后,进入:http://localhost:8006/geowebcache/demo,点击"Reload Configuration"重新读取配置信息,如下所示:

如果需要你输入密码,密码信息在WEB-INF\users.properties这个文件中,重新进入:http://localhost:8006/geowebcache/demo,如果配置信息没错,你会发现,你所配置的图层信息已经显示在这个页面上了,点击“Seed this layer”,然后你需要输入下面这些信息:

设置好,点submit就开始切图了。

下面说一下在openlayer中怎样调用geowebcache的瓦片: 

 

01 var options =
02             {
03                 resolutions:[1.12630863280296323,2.25261726560592646,4.0104690624237058,8.083752499389647,16.167504998779293,32.335009997558586,64.67001999511717,129.34003999023435,258.6800799804687,517.3601599609374,1000.4406398437495],
04                 projection: new OpenLayers.Projection("EPSG:3395"),
05                 units: "meters",
06                 maxExtent: bounds
07             };
08  
09             //初始化地图对象
10             var map = new OpenLayers.Map("GisMap", options);
11             //底图
12             var baseLayer = new OpenLayers.Layer.WMS(
13                 "baseLayer",
14                 "http://localhost:8006/geowebcache/service/wms",
15                 { layers: "heightway", format: 'image/jpeg' },
16                 { tileSize: new OpenLayers.Size(256,256) }
17             );
18

   

 map.addLayers([baseLayer]);

 
以上参考:百度百科及http://my.oschina.net/LinBandit/blog/106146
原文地址:https://www.cnblogs.com/LCGIS/p/3069491.html