簡介Geojson是一個很重要的數據格式,結構清晰,表達簡潔,是用于滿足空間數據展示。如今,各大地圖服務商的jssdk都已經支持geojson的數據格式,例如高德等,更不用說阿里的L7地理數據可視化引擎,可見這種數據格式的重要性。 與ESRI的shapefile相比更加小巧簡單,但是表現的數據內容卻是一樣的,我覺得GeoJson大有取代shapefile的勢頭。與還不是很成熟的topojson相比,geojson已經兼容很多前端后段的工具,有很多腳本插件。如下: 舉個栗子,抗擊非典的全國疫情各省份分布圖,可以被稱之為專題地圖,geojson則被廣泛應用?到各種實時報告頁面當中。? 結構說明點的數據格式{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [125.6, 10.1] }, "properties": { "name": "Dinagat Islands" }}
type指的是數據類型,它是一個feature。它包含幾何要素和屬性。幾何要素包含要素的類型和坐標。屬性可以包含各種數據類型。
線的數據格式 { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]}
線狀數據由兩個以上的點組合而成,在坐標的外面多包上一層中括號,表示json中的數組。 面的數據格式 { "type": "Polygon", "coordinates": [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ], [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ] ] }
由于面狀數據可以為鏤空多邊形,可以支持一個以上的多邊形,所以在線狀數據的基礎上多加一層中括號。 要素組合的數據格式 { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": {"type": "Point", "coordinates": [102.0, 0.5]}, "properties": {"prop0": "value0"} }, { "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0] ] }, "properties": { "prop0": "value0", "prop1": 0.0 } }, { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ] }, "properties": { "prop0": "value0", "prop1": {"this": "that"} } } ] }
不同的數據類型間可以包成一個FeatureCollection,最外層有個type來表示類型,而features指向各個feature數組。有人肯定會疑惑shp中有proj的屬性,geojson中可以用crs和bbox來表示投影參數和邊界范圍,詳情參考。 案例這里分享一個小案例。 網友問我,獲取大批量線段的起點和終點。
我的第一反應就是并不是用arcpy等api,這方法也可行,但是并不是最簡潔的方法。我的解決方法是最直接的: - 通過qgis將shapefile文件轉換成geojson
- 用python內置庫json去解析獲取數據
這樣相對來說,雖然多了一個數據轉換的過程,但是結合本章內容,geojson是文本,結構簡潔,方便解析。數據可以很容易獲取且替換。這個小實驗作為課余作業(yè)。json的解析大概是10行代碼左右,熟悉python的高手可能5行代碼就搞定,比arcpy大大節(jié)省代碼。
|