天天看點

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

文章版權由作者李曉晖和部落格園共有,若轉載請于明顯處标明出處:http://www.cnblogs.com/naaoveGIS/。

1.前言

在WebGIS中,影像金字塔是一個很重要的概念。在WebGIS的原理講解系列中,我讨論過切圖的原理,尋址的算法,前端顯示的算法等,有興趣的朋友可以看一下:http://www.cnblogs.com/naaoveGIS/category/600559.html。

我将前端瓦片的來源分為了兩種,一種是線上瓦片,一種是離線瓦片。但是如果我們深究瓦片的真正來源,無法是來至三個切圖工具:ArcGIS的切圖工具,城管局的切圖工具以及公司的切圖工具。當然,有時候我們也能看到來至于天地圖的切圖工具或者其他第三方切圖工具。這裡,我跟大家介紹另外一種切圖工具——GeoWebCache。

在geoserver1.7版本之後,geoserver本身內建了GeoWebCache這個子產品。本文介紹的是geoserver2.2版本,其本身自帶有GeoWebCache。不過如果你的geoserver版本比較老,或者想使用最新的GeoWebCache,可以自行在網上下載下傳此工具,然後根據說明按照和配置,這裡不做描述。

2.GeoWebCache簡介

2.1 總體描述

GeoWebCache(GWC)是一個采用Java實作用于緩存WMS(Web Map Service)Tile的開源項目。當地圖用戶端請求一張新地圖和Tile時,GeoWebCache将攔截這些調用然後傳回緩存過的Tiles。如果找不到緩存再調用伺服器上的Tiles,進而提高地圖展示的速度。實作更好的使用者體驗。

2.2特點描述

a.GWC支援多種來源的瓦片,比如ArcGIS的瓦片。

b.GWC支援多種請求,比如WMS、WMS-C、WMTS、TMS、Googl Maps KML和Virtual Earth。

c.GWC支援在第一次請求地圖某範圍時,将此範圍内的地圖按照配置的資訊進行切圖緩存。第二次同樣請求此範圍的地圖時,直接讀取緩存瓦片進行加速顯示。此功能類似于AGS的動态出圖。

d.GWC同時也支援預先将瓦片按照配置資訊切完,地圖加載時直接讀取瓦片。此功能類似于AGS的瓦片緩存出圖。

3.具體配置

由于我所用的Geoserver本身自帶有此功能,是以配置相對容易。

3.1配置瓦片存放位址

在GeoServer的web.xml檔案中加上如下配置,便可以控制瓦片存放的目錄:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

3.2瓦片詳細資訊配置

當我們配置好3.1中的位址項後,重新開機tomcat,可以發現在指定的瓦片存放檔案夾下産生了這樣三個檔案:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

其中的GeoWebCache.xml便是瓦片的詳細配置文檔。此配置項在支援使用其他來源的瓦片進行顯示上非常重要。不過,目前Geoserver中的內建版本不支援此功能,GeoWebCache的獨立版本可以支援,在以後的章節裡跟我跟大家一起探讨此功能。

4.切圖操作

4.1.進入gwc頁面

啟動tomcat後,在浏覽器中直接輸入http://localhost:8680/geoserver/gwc/,可進入如下頁面:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

4.2選擇需要切圖的服務

點選list選項,可以看到能夠進行切圖的服務:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

4.3進行預切圖(非必須)

如果想實作類似于AGS中預先将所有瓦片全部進行切圖的效果,可以點選要進行切圖的圖層下的Seed this layer:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

點選Submit後,開始進行預切圖,在頁面中可以看到切圖程序:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

在瓦片緩存目錄下可以看到切圖結果:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

注意:在切圖頁面上,也可以停止切圖程序:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

5.使用切圖服務探究

5.1如果我們的WMS請求為一般性url,是否可以自動開啟瓦片緩存服務?——不能

點選Geoserver中的layer preview,檢視某一圖層,某一URL為:http://localhost:8680/geoserver/wms?LAYERS=tilelayer&STYLES=&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG%3A4326&BBOX=104.07920033743,30.648478876565,104.08458074933,30.652787409535&WIDTH=512&HEIGHT=410。

效果如下:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

 檢視我們的瓦片緩存檔案,并沒有任何跟改圖層服務相關的瓦片緩存生成:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

5.2使用特殊的WMS的url,是否可以自動開啟瓦片緩存服務?——可以

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

點選此項中的png,在彈出的頁面中放大縮小,某一URL為:http://localhost:8680/geoserver/gwc/service/wms?LAYERS=urbanlayer%3Atilelayer&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A4326&BBOX=104.1943359375,30.5419921875,104.23828125,30.5859375&WIDTH=256&HEIGHT=256

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

此時,在瓦片緩存檔案夾中我們可以明顯的看到生成的對應緩存:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

5.3由以上例子總結

對比以上兩個服務的url:

http://localhost:8680/geoserver/wms
http://localhost:8680/geoserver/gwc/service/wms

可以看見兩者的差別僅僅在于,當請求的URL中加上gwc/service後,便可以開啟瓦片緩存服務了。

6.可能存在的問題

6.1效率問題

如果使用動态切圖,即非預切圖。當需要切圖的資料(圖層或圖層組)很大時,會不會地圖第一次顯示比較慢?

6.2切圖效果失真問題

網上有人提出這樣一個問題:問題是GeoWebCache切片後的圖檔品質降低,縮放的時候圖檔像素都擁擠在一起,沒有像windows圖檔檢視器或者ps那樣縮小的圖檔還那樣保持清晰。

原圖:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

GWC瓦片:

利用GeoWebCache實作WebGIS地形圖展示的緩存優化

注意:針對此問題,有網友給出了解決方案:嘗試使用maptiler切片工具,不過 maptiler工具有局限,無法整合多張圖後一起切圖。

                                                              -----歡迎轉載,但保留版權,請于明顯處标明出處:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您覺得本文确實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                      

利用GeoWebCache實作WebGIS地形圖展示的緩存優化