阅读:2294回复:0
GIS共享與交流 2 (矢量切片)
今天想和大家分享WebGIS中使用矢量切片的問題:
「引子」大家應該在使用Google Map(GM)中留意到,GM加載時是用的柵格切片,數秒後會變為矢量切片。 我們在自己的iPhone上使用Google Map和Apple Map時,加載的也是矢量切片。 視覺上我們留意到矢量切片有如下特點: - 精美的渲染細節 - 地圖旋轉時標記層可以始終保持不被旋轉 - 無限級的縮放 - 地物對象的自動消隱和抽稀 與柵格切片相比,使用矢量切片主要有以下優點: - 數據傳輸更快,因為矢量文件通常很小 - 在客戶端就可以進行動態渲染,更靈活控制表現層 - 可以增加較強的交亙性:用JS+CSS就可以去操緃矢量對象 - 服務器端負荷會低,因為耗時的渲染過程不用在服務器上進行 「矢量切片格式」 提到網絡數據交換格式,很自然地我們想到的是JSON。而在GIS業內我們有GeoJSON。當然我們也可以不采用GeoJSON而自己去設計JSON的數據結構以便於我們自己進行數據壓縮。當然已有人去做了,比如TopoJSON。 但有人依然不滿足用明碼去進行數據傳輸,他們想到了二進制格式。所以有了今天很流行的格式: - Mapbox首先製訂了開源矢量切片的技術規範,使用的是Google protocol buffers。 - OpenStreetMap使用的是Mapnik Vector Tiles,是一種基於WKB的二進製文件。 - 當然,有能力和需要的我們也可以自己去設計自己的二進製格式。 「製作矢量切片」 之前我在做一個項目,需要發佈大量空間數據,基本上是做一個在綫版的ArcCatlog。我想到自己可以嘗試用矢量切片。以下我當時的筆記,記錄了當時我瞭解到的各種可能的方案: 方案一:使用GeoServer (選擇一)
方案一:使用GeoServer (選擇二) 使用PGRestAPI,但失敗了因為
失敗,因為在我的Mac OS X上安裝總不成功。 方案四:Mapbox的Mapbox Studio 我找到了Mapbox的在綫數據發佈IDE,可以把自己的數據導入和使用。但是
方案五:Mapbox的Mapbox Studio Classic 這是Mapbox早期產品,以不被在綫IDE(上面)所取代,但依然可以在Mapbox下載。我嘗試此方案可以。如果有朋友想採用此方案。以下是詳細步驟:
生成的mbtiles實則是個sqlite數據庫,裡面就是矢量切片。可以用別的(NodeJS)工具去發佈。前台用Mapbox GL JS。這個方案最大的問題是準備矢量切片全要手動完成。不現實。deadend。 方案六:NodeJS 在我看到NodeJS時,發現目前此方案為最優方案。其實NodeJS有許多插件支持矢量切片的發佈。我使用的是tilelive-bridge它其實發佈的是你的矢量數據的mapnik的XML配置文件。當然,你需要自己去產生這個文件,其規範可以Google到。那tilelive-bridge支持的gis數據有哪些呢?因為它支持OGR可以識別的所有格式,因此我們有許多的選擇。另外,如果你的數據不是以文件形式存放(比如是在Database服務器裡)也沒問題,因為它還支持OGR虛拟格式。 在我的項目裡,我的矢量數據都存放在ESRI的File GDB項目數據庫裡,因為除了發佈成WebGIS,我的客戶還要使用ArcMap去操作數據。 我想對比哪個辧案效率更快:
前端使用Mapbox GL JS。它是開源的項目,而且有許多功能可以直接使用,API:https://www.mapbox.com/mapbox-gl-js/api/ 推薦些資源:
|
||
|