文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
1. 背景
在之前多篇文章中我描述了如何編寫矢量地圖切片工具、如何基於Geoserver來進行矢量切片方案。這兩種方案各有局限:
- 矢量地圖預切片工具對實時數據的實時更新很難做出及時更新,需人工干預。
- Geoserver切片方案需要依賴於Geoserver地理服務器。
這里,我們可以將方案進一步升級。
2. 整體設計
需要解決的幾點:
a.統一矢量數據源,無需針對項目中不同系統采用不同的配圖方案。由於項目中環境復雜,往往涉及老系統、新系統、PC端、移動端。對於老系統並不支持矢量切片的解析,難道還要再次對數據配圖,采用arcgis切片?
b.擺脫Geoserver的束縛,對於已經有arcgis(10.2以前)的環境的項目,難道還要再安裝一個Geoserver?
c.矢量配圖得實現可視化,難道每次手寫樣式文件?
d.即支持切片預處理,也得支持切片的動態更新。
根據這幾點要求,做了如下設計:

具體描述為:
a.服務端支持根據PG數據源生成矢量切片。
b.服務端支持根據PG數據源和樣式文件生成圖片切片。
c.配圖平台支持分別生成矢量切片樣式文件和圖片切片樣式文件。
d.前端根據產品版本,分別發送對應格式的切片獲取請求。
3. 基於PG的矢量切片生成
9.6以上postgresql+2.4postgis,提供了兩個矢量切片的空間函數:ST_AsMVT,ST_AsMVTGeom(mapbox格式),即可生成。但是由於不能保證各項目的PG為此版本以上,這里采用可以普適的方案,服務端基於pbf開發包(java-vector-tile、protobuf-javanano、protobuf-java)來進行。

a.根據瓦片范圍查詢PG庫獲取要素(wkt)。
b.對要素解析成geometry格式。
c.將要素的幾何坐標轉換為屏幕坐標。
d.將此時的要素編碼成pbf格式。
測試結果:
4. 基於PG的圖片切片生成
在開源架構中,通常為:QGIS、UDig做桌面數據處理工具,Geoserver、MapServer是比較常用的地理服務器,Postgresql+PostGIS作為空間數據庫。但是,隨着地理數據庫PG越來越強大,Geoserver的功能反而在被逐漸弱化。PG可以支持各類空間查詢,空間分析,甚至路徑分析上。而針對切片的生成,PG+Mapnik的方案,也能很好的解決。
這里選用python進行代碼測試:


測試樣式文件,編寫數據源配置和樣式配置:

測試結果:

-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

