矢量地圖方案的進一步探討

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/前端

1. 背景

       在以前多篇文章中我描述瞭如何編寫矢量地圖切片工具、如何基於Geoserver來進行矢量切片方案。這兩種方案各有侷限:java

  1. 矢量地圖預切片工具對實時數據的實時更新很難作出及時更新,需人工干預。    
  2. Geoserver切片方案須要依賴於Geoserver地理服務器。

   這裏,咱們能夠將方案進一步升級。python

2. 總體設計

       須要解決的幾點:sql

       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/

                                                                           若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                                           

相關文章
相關標籤/搜索