最近因為工作需要學習了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找到,如果這個設定有問題很可能會出現座標計算不正確或者影象超出範圍等問題。