陽華 劉振宇 許文明
南華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 湖南 421001
GeoWebCache通過存儲(緩存)地圖圖片或瓦片,當(dāng)它們被請求時,GeoWebCache致力于充當(dāng)客戶端(OpenLayer或Google Maps)服務(wù)端(GeoServer或其他WMS服務(wù))間的代理。GeoWebCache(GWC)是一個采用Java實(shí)現(xiàn)用于緩存WMS(eb Map Service)Tile的開源項(xiàng)目。當(dāng)?shù)貓D客戶端請求一張新地圖和Tile時,GeoWebCache將攔截這些調(diào)用然后返回緩存過的Tiles。如果找不到緩存再調(diào)用服務(wù)器上的Tiles,從而提高地圖展示的速度,實(shí)現(xiàn)更好的用戶體驗(yàn)。如圖1所示,服務(wù)器中藍(lán)色的柱體就是瓦片的倉庫。事實(shí)上,我們只需直接請求瓦片倉庫而不需要咨詢WMS服務(wù),就可以拼湊出龐大的地圖,因?yàn)镚eoWebCache每秒鐘可以應(yīng)答成百上千的請求。
圖1 eoWebCache在架構(gòu)中所處的位置
對于Web而言,將矢量圖層渲染為柵格數(shù)據(jù)是一個昂貴的計(jì)算過程。如果矢量圖層并不是經(jīng)常修改,這樣一次次重復(fù)描繪同樣的線條就是在浪費(fèi)寶貴的CPU。當(dāng)Google Maps推出瓦片地圖后,大一些的地圖網(wǎng)站紛紛效仿,都是預(yù)先渲染好標(biāo)注得很完美的海量圖片,然后將這些大圖片分割為256*256像素的瓦片,這些瓦片很小,以致它們下載很快,它們的文件名不會改變,以致瀏覽器能快速緩存起來。
研究Google Maps可以發(fā)現(xiàn),google地圖有0~17共十八級縮放比例,其瓦片大小為256*256,當(dāng)0級比例尺為1:10000公里時,是一副循環(huán)的世界地圖圖片,以后每放大一級,比例尺增大一倍,在上一級的瓦片基礎(chǔ)上再一分為四個256*256的瓦片,分辨率也越來越高,顯示的內(nèi)容越來越豐富,17級最豐富。這就是WebGIS中常用的金字塔模型,如圖2所示。
圖2 字塔模型
創(chuàng)建地圖緩存之前先要設(shè)計(jì)地圖,在實(shí)際應(yīng)用中Web地圖通常包含底圖和功能性的專題圖層,需要對它們分別切割。GeoServer也可采用類似google同樣的切割方法,切割完的圖片按照 c_r.png的格式進(jìn)行編碼命名,存儲于名為EPSG_投影編碼_s的文件夾中,s為比例尺級別;r為行號,c 為列號,0<r<2s,0<c<2s,第一行行號為 00,第一列列號為:00。其命名規(guī)則如圖3所示。
圖3 片分割命名規(guī)則
根據(jù)以上圖片切割編碼規(guī)則,可以得到如下?lián)Q算公式來完成圖片像素坐標(biāo)和實(shí)際地理坐標(biāo)之間的換算關(guān)系:
(1)已知條件和變量:
① 已知待切地圖范圍:左上角坐標(biāo) (Xmin,Ymax);右下角坐標(biāo) (Xmax,Ymin)。
② 已知切圖后圖片的高寬:width。
③ 地圖跨度: ΔX=Xmax-Xmin; ΔY=Ymax-Ymin。
④ 當(dāng)前坐標(biāo):(X,Y) 。
⑤ 當(dāng)前瓦片名:c_r.png,所在列cv= c;所在行rv=r;所在的文件夾名EPSG4326_b,比例尺級別loc=b。
⑥ 當(dāng)前瓦片范圍:左上角坐標(biāo) (tileXmin,tileYmax);右下角坐標(biāo) (tileXmax,tileYmin)。
(2)根據(jù)當(dāng)前瓦片名稱計(jì)算當(dāng)前瓦片范圍:(3)根據(jù)坐標(biāo)和比例尺計(jì)算當(dāng)前圖片所在的行列號:
(4)當(dāng)前坐標(biāo)在當(dāng)前圖片上的像素坐標(biāo)( , )pXpY:
一致性維護(hù)機(jī)制保證 Web緩存庫中的地圖信息與底層空間數(shù)據(jù)庫中的地圖信息一致,各Web緩存數(shù)據(jù)庫之間信息一致。具體的一致性維護(hù)是通過并行的兩步實(shí)現(xiàn)的。
第一,客戶端修改地圖,向服務(wù)器發(fā)出修改信息,Web服務(wù)器在完成修改后,會計(jì)算出此次請求所改動的圖片,于是向應(yīng)用服務(wù)器請求并獲得更新的圖片,然后用新圖片替代緩存中的舊圖片,從而使當(dāng)前緩存數(shù)據(jù)庫與底層空間數(shù)據(jù)庫中的信息一致。
第二,Web服務(wù)器感知信息,當(dāng)應(yīng)用服務(wù)器成功響應(yīng)客戶的修改地圖請求后,應(yīng)用服務(wù)器會通知各Web服務(wù)器,各Web服務(wù)器判斷此更改是否影響本地Web緩存,如果不影響就不處理該消息,否則就向應(yīng)用服務(wù)器發(fā)送新的獲取地圖請求,將緩存中原有地圖圖片替換。
由于GeoWebCache是一個采用Java實(shí)現(xiàn)用于緩存WMS Tile的開源項(xiàng)目,開源的GWC和Geoserver均滿足J2EE規(guī)范,發(fā)布的時候只需將geowebcache.war文件復(fù)制于tomcat的webapp目錄下,可修改tomcat端口為8088,以中國地圖Chinese為例,將一副中國地圖發(fā)布至 GeoServer后,修改tomcat下WEB-INF/class目錄下的geoserver.xml,添加如下xml:
<wmsLayer>
<name>China</name>
<mimeFormats><string>image/png</string></mimeFormats>
<!-- Grid Subset Example -->
<gridSubsets>
<gridSubset>
<gridSetName>EPSG:4326</gridSetName>
<extent>
<coords>
<double>73.447</double>
<double>3.048</double>
<double>135.086</double>
<double>53.558</double>
</coords>
</extent>
</gridSubset>
</gridSubsets><
wmsUrl>
<string>http://localhost:8080/geoserver/wms</string>
</wmsUrl>
<wmsLayers>Chinese:bou2_41</wmsLayers>
<transparent>false</transparent>
<bgColor>0x0066FF</bgColor>
<expireCacheList>
<expirationRule minZoom="0" expiration="60" />
</expireCacheList>
<expireClientsList>
<expirationRule minZoom="0" expiration="500" />
</expireClientsList>
</wmsLayer>
在geowebcache目錄下新建Chinese.html,加入如下客戶端訪問代碼:
var map, layer;
function init(){
map = new OpenLayers.Map('map');
var bounds = new OpenLayers.Bounds(73.447,3.408,135.086,53.558);
layerpublic = new OpenLayers.Layer.WMS( "china",
"http://localhost:8088/geowebcache/service/wms?layers=China",
{
layers: 'China',
format: 'image/png',
tiled: false,
transparent: true
},
{
reproject: true,isBaseLayer: true
}
);
map.addLayer(layer);
map.zoomToExtent(bounds);
}
打開瀏覽器,輸入http://localhost:8088/geowebcache/Chinese.html,就可以訪問一副由瓦片構(gòu)造的中國地圖了。
目前,WebGIS整合Ajax客戶端的技術(shù)日趨成熟,客戶端框架也逐漸增多,隨著空間地圖數(shù)據(jù)的日益增多,空間交互也變得越來越復(fù)雜,單獨(dú)依賴開源的客戶端和成熟的WebGIS服務(wù)已經(jīng)不能滿足大型 WebGIS系統(tǒng)開發(fā)的要求,所以在開發(fā)過程中需要整合第三方平臺,實(shí)現(xiàn)更高效的開發(fā),本文通過對瓦片金字塔的創(chuàng)建、內(nèi)部原理、發(fā)布等關(guān)鍵技術(shù)的描述,對多平臺整合有一定的幫助。
[1]GeoWebCache Documention[EB/OL]. http://geowebcache.org/docs/current/ntroduction/whatis.html.
[2]Scott Davis,蔣波濤譯.GIS for Web Developers[M].北京:電子工業(yè)出版社.2008.
[3]殷福忠,孫立民.基于瓦片金字塔技術(shù)的地圖發(fā)布平臺開發(fā)研究[J].測繪與空間地理信息.2010.
[4]張俊麗,李艷明,李欣.WebGIS地圖圖片緩存技術(shù)研究[J].微計(jì)算機(jī)信息.2009.