最近因為工作需要學習了GeoWebCache,有了一些實戰經驗跟大家分享一下。
廢話不多說,直接上問題!
1、切片的緩存問題
當地圖服務(這里默認指WMS)的數據更新時,GeoWebCache的切片如何隨之更新,客戶瀏覽器上的緩存如何更新成了一個繞不開的問題。GeoWebCache提供了相應的配置項供我們自定義服務端和客戶端的切片保存時間。
<!-- 可選:一個瓦片在服務器保持可用的秒數。后續請求將取回的結果是一個新的瓦片。默認是永久cache。參數列表應該常常以minZoom="0"開頭,然后單調遞增。特殊值:-1表示從不緩存,-2表示從不過期 --> <expireCacheList> <expirationRule minZoom="0" expiration="14400" /> <expirationRule minZoom="10" expiration="7200" /> </expireCacheList> <!-- 可選:客戶端從GWC收到瓦片之后,需要緩存的時間(秒為單位)。默認值使用和WMS服務器提供的過期時間相同。如果值不可用,緩存2小時,參見expireCacheList --> <expireClientsList> <expirationRule minZoom="0" expiration="7200" /> <expirationRule minZoom="10" expiration="600" /> </expireClientsList>
如果你不設置該配置項,服務端和客戶端的默認緩存時間都是兩個小時,你也可以根據需要單獨設置任何一個縮放級別的緩存時間。
2、圖片格式和圖片壓縮的問題
切片的一般是在瀏覽器上使用的,切片傳到瀏覽器給客戶展現出來需要考慮到使用的流量和需要的時間的問題,最好可以做到加載時間短,占用瀏覽少,試了很多辦法,最有效的就是壓縮切片。 GeoWebCache提供了相應的壓縮切片的配置,我試了一下感覺效果最明顯的還是對JPEG格式圖片的壓縮,大家可以試試,如果有問題可以跟我說。
<!-- 可選:格式修改器,這些也可以通過對各個圖層單獨定義 --> <formatModifiers> <!-- 能夠有一個和多個這樣的元素 --> <formatModifier> <!-- 必要:應用於JPEG --> <responseFormat>image/jpeg</responseFormat> <!-- 可選:從后端的PNG請求時,阻止雙重壓縮 --> <requestFormat>image/png</requestFormat> <!-- 可選:透明度支持 --> <transparent>false</transparent> <!-- 可選:背景顏色 --> <bgColor>0xFFFFFF</bgColor> <!-- 可選WMS服務器使用的調色板 --> <palette>somepalette</palette> <!-- 可選:調節壓縮等級,1.0是最佳質量 --> <compressionQuality>0.9</compressionQuality> </formatModifier> </formatModifiers>
這里需要注意的是,最好把bgColor調為白色,這樣圖片大小會小一些,而且效果也會好一些,而compressionQuality最好不要小於0.75(官網上說0.75以上圖片質量基本無損),當然還是要根據使用中的具體情況來調整,我就是用的0.5,完全滿足要求。
3、使用ArcGIS Server發布地圖服務的問題
ArcGIS Server很強大,美中不足的是它提供的Javascript api過於龐大,不適合手機上使用,於是就會想到用openlayers,但openlayers調用ArcGIS Server的切片服務的顯示效果又很差(尤其是自定義坐標系),於是,我才會想到用GeoWebCache,還好GeoWebCache支持ArcGIS Server的WMS服務。
<wmsLayer> <name>NEW-layer2</name> <mimeFormats> <string>image/jpeg</string> </mimeFormats> <!-- Grid Subset Example --> <gridSubsets> <gridSubset> <gridSetName>EPSG:2383</gridSetName> <extent> <coords> <double>-26</double> <double>-402</double> <double>525</double> <double>20</double> </coords> </extent> </gridSubset> </gridSubsets> <wmsUrl> <string>http://test/arcgis/services/NEW-layer2/layer2/MapServer/WMSServer?</string> </wmsUrl> <wmsLayers>0</wmsLayers> <transparent>false</transparent> <bgColor>0xFFFFFF</bgColor> </wmsLayer>
這里需要注意的是引用ArcGIS Sever發布的WMS服務的時候別忘了最后的那個"?",不加可能會有問題。還有就是要根據具體的需求配置好wmsLayers項,這個配置項是指你要在切片中顯示的圖層,多配或者少配顯示效果都不對。再就是要配置正確你的坐標系和坐標范圍,這些信息都可以從ArcGIS Server找到,如果這個設置有問題很可能會出現坐標計算不正確或者圖像超出范圍等問題。