Ubuntu16.04 Flask+Python-Mapnik + PostGIS 向量切片初體驗
基礎概念
柵格資料、向量資料
這部分份內容我就不贅述了,感興趣的請自行傳送瀏覽。
向量資料:傳送門
柵格資料:傳送門
柵格資料、向量資料對比:傳送門A、傳送門B、傳送門C
推薦關於柵格資料的部落格:柵格那點事兒
柵格切片、向量切片
柵格切片
柵格切片圖層將底圖作為影象檔案(例如,JPG 或 PNG 格式)交付給客戶端應用程式,這些影象檔案已經預渲染並存儲在伺服器上,並由客戶端按原樣顯示。柵格切片圖層最適合於為您的地圖提供地理環境的底圖,例如影像(比如在世界影像底圖中)或基於要素的地圖,例如地形、國家地理、海洋和其他底圖。柵格切片圖層也可以由靜態業務圖層組成,例如資料的專題地圖。
切片圖層格式可通過 Internet 快速傳輸,並且很容易為大多數常見的地圖軟體應用程式所理解,因此這些底圖不僅與 ArcGIS 和使用 ArcGIS API 構建的 Web 應用程式相容,還與使用 OGC 協議(例如 WMS/WMTS)的第三方應用程式相容。柵格切片圖層的其他優點如下:
• 適用於各種應用程式和裝置(Web、桌面和移動裝置),其中包括 ArcMap 等桌面應用程式和舊版 web 瀏覽器。
• 提供高階製圖功能,如高階標註放置和符號系統。
• 支援各種柵格資料來源,如影像和高程資料。
• 可通過 Web 製圖應用程式列印。
向量切片
向量切片圖層引用一組 web 可用的向量切片以及這些切片應被繪製的相應樣式。向量切片與柵格切片類似,但是它們儲存資料的矢量表示。也就是說,地理要素以客戶端應用程式可理解的格式表示為點、線和麵。不同於柵格切片圖層,向量切片圖層能夠適應顯示裝置的解析度,並且可以改變樣式以用於多種用途。向量切片檔案比柵格切片檔案更小,這意味著製圖更快、效能更好。切片訪問效能和向量繪製的結合使切片能夠適應任意顯示解析度(裝置不同,解析度可能不同)。
相關資源:
MVT
Mapbox向量圖塊規範:傳送門
向量切片的意義
個人愚見:
- 相對柵格資料,資料傳輸量更小,前端體驗更好。
- 相對柵格資料,粒度更小,可以控制到要素級別,支援按需獲取。
- 實時性更好,支援資料更新,切圖更快。
- 資訊儲存更完整,細節儲存完整。
- 樣式可修改,定製型更強。
向量切片實現
awesome-vector-tiles(關於向量切片實現的一下資料,算是比較全的了)
Mapnik
基礎
關於Mapnik、Python-Mapnik的基礎概念、安裝、學習資料,參考上一篇:傳送門
Mapnik XML檔案配置
- XML配置官方資料:傳送門
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m [email protected] +no_defs" background-color="#00000000">
<Layer name="grid_polygons" status="on" srs="+proj=longlat +ellps=GRS80 +no_defs ">
<StyleName>grid_polygons</StyleName>
<Datasource>
<Parameter name="table">(select geom from grid_polygons) as grid_polygons</Parameter>
<Parameter name="type">postgis</Parameter>
<Parameter name="host">localhost</Parameter>
<Parameter name="port">5432</Parameter>
<Parameter name="user">postgres</Parameter>
<Parameter name="password">postgres</Parameter>
<Parameter name="dbname">postgres</Parameter>
<Parameter name="max_size">20</Parameter>
</Datasource>
</Layer>
<Style name="grid_polygons">
<Rule>
<PolygonSymbolizer fill="#FF7F24"/>
<LineSymbolizer stroke-width=".5" stroke="#000000"/>
</Rule>
</Style>
</Map>
Mapnik 優化策略
Flask框架
Flask 是一個 Python 實現的 Web 開發微框架,輕巧簡單容易上手。
官方資料:傳送門
向量切片服務端
參考程式碼:傳送門
向量切片前端渲染
這塊可以使用Openlayers或Leaflet開發,前端這塊的程式碼我就不貼了。
測試結果
500-600w的面數據,13-14級 實時載入無壓力,12級略慢。
最後附上一張效果圖: