一種特殊的JSON格式

簡介

Geojson是一個很重要的數(shù)據(jù)格式,結(jié)構(gòu)清晰,表達(dá)簡潔,是用于滿足空間數(shù)據(jù)展示。如今,各大地圖服務(wù)商的jssdk都已經(jīng)支持geojson的數(shù)據(jù)格式,例如高德等,更不用說阿里的L7地理數(shù)據(jù)可視化引擎,可見這種數(shù)據(jù)格式的重要性。

與ESRI的shapefile相比更加小巧簡單,但是表現(xiàn)的數(shù)據(jù)內(nèi)容卻是一樣的,我覺得GeoJson大有取代shapefile的勢頭。與還不是很成熟的topojson相比,geojson已經(jīng)兼容很多前端后段的工具,有很多腳本插件。如下:

舉個栗子,抗擊非典的全國疫情各省份分布圖,可以被稱之為專題地圖,geojson則被廣泛應(yīng)用?到各種實(shí)時(shí)報(bào)告頁面當(dāng)中。?

結(jié)構(gòu)說明

點(diǎn)的數(shù)據(jù)格式

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}

type指的是數(shù)據(jù)類型,它是一個feature。它包含幾何要素屬性。幾何要素包含要素的類型和坐標(biāo)。屬性可以包含各種數(shù)據(jù)類型。

線的數(shù)據(jù)格式

 {
  "type": "LineString",
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}

線狀數(shù)據(jù)由兩個以上的點(diǎn)組合而成,在坐標(biāo)的外面多包上一層中括號,表示json中的數(shù)組。

面的數(shù)據(jù)格式

 {
   "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] ]
      ]
 }

由于面狀數(shù)據(jù)可以為鏤空多邊形,可以支持一個以上的多邊形,所以在線狀數(shù)據(jù)的基礎(chǔ)上多加一層中括號。

要素組合的數(shù)據(jù)格式

 { "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"}
           }
         }
       ]
     }

不同的數(shù)據(jù)類型間可以包成一個FeatureCollection,最外層有個type來表示類型,而features指向各個feature數(shù)組。有人肯定會疑惑shp中有proj的屬性,geojson中可以用crsbbox來表示投影參數(shù)和邊界范圍,詳情參考。

案例

這里分享一個小案例。

網(wǎng)友問我,獲取大批量線段的起點(diǎn)和終點(diǎn)。

我的第一反應(yīng)就是并不是用arcpy等api,這方法也可行,但是并不是最簡潔的方法。我的解決方法是最直接的:

  • 通過qgis將shapefile文件轉(zhuǎn)換成geojson
  • 用python內(nèi)置庫json去解析獲取數(shù)據(jù)

這樣相對來說,雖然多了一個數(shù)據(jù)轉(zhuǎn)換的過程,但是結(jié)合本章內(nèi)容,geojson是文本,結(jié)構(gòu)簡潔,方便解析。數(shù)據(jù)可以很容易獲取且替換。這個小實(shí)驗(yàn)作為課余作業(yè)。json的解析大概是10行代碼左右,熟悉python的高手可能5行代碼就搞定,比arcpy大大節(jié)省代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容