GeoJSON數據格式解析


GeoJSON數據格式

https://www.bilibili.com/video/BV1VK4y1M78n?spm_id_from=333.337.search-card.all.click

Mapbox和PostGis里面常用的數據格式是GeoJSON

TopoJSON壓縮率比GeoJSON更高

TopoJSON 是 GeoJSON 的擴展,增加了拓撲邏輯的編碼。

TopoJSON 文件中的幾何圖形不是獨立地表示,而是由共享的線段(稱為弧線)拼接而成。TopoJSON 消除了冗余,提供了比 GeoJSON 更緊湊的幾何表示;典型的 TopoJSON 文件比 GeoJSON 等價文件小 80%。此外,TopoJSON 還為使用拓撲的應用提供了便利,如拓撲保護形狀簡化、自動地圖着色和制圖。

GeoJSON手冊

網址:https://geojson.org/

GeoJSON 是一種用於編碼各種地理數據結構的格式。

// Feature:表示這是一個要素
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}

GeoJSON 支持以下幾何類型:PointLineString(線)、 Polygon(面)、MultiPointMultiLineStringMultiPolygon。具有附加屬性的幾何對象是Feature對象。特征集包含在FeatureCollection對象中。

  • MultiPolygon:這個面覆蓋着好多的小島
  • FeatureCollection(要素集合):多個Feature放在一起,一個要素集合也是一個標准的Geojson格式
  • 單獨一個點,一個線,一個面也是一個標准的Geojson格式

GeoJSON格式規范說明

https://www.oschina.net/translate/geojson-spec

1. GeoJSON特征集合

// 前后台開發使用的時候FeatureCollection只會寸一種類型,要么是點,要么是線,要么是面
{ "type": "FeatureCollection",			// type標識這一段是什么東西:Feature的集合
  "features": [
    { "type": "Feature",				// 一個Feature要素是包含圖形和屬性在一起的
     	// geometry里面也是一個對象,對象里面的type就是點線面、多點、多線、多面六種
      "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},	// geometry:圖形
      "properties": {"prop0": "value0"}								// properties:屬性
      },
      // 一個Feature里type和geometry是必須的,properties不是必須的
    { "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"}
         }
       }
     ]
   }

解析Geojson的網站:http://geojson.io/#map=2/50.5/50.3

// 一個geometry可以被geojson.io進行解析,所以一個geomtry也可以被稱為genjson
{
        "type": "LineString",
        "coordinates": [
          [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
          ]
        }

!![image-20220409103908484](D:\10. OSM\02. tippecanoe筆記\06.GeoJSON數據格式解析.assets\image-20220409103908484.png)

// 一個Feature也被認為是一個標准的geojson
{ "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
        }
      }

!![image-20220409104011427](D:\10. OSM\02. tippecanoe筆記\06.GeoJSON數據格式解析.assets\image-20220409104011427.png)

// 標准的FeatureCollection格式
{
  "type": "FeatureCollection",
  "features": [
    { "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
        }
      }]
}

![image-20220409104030567](D:\10. OSM\02. tippecanoe筆記\06.GeoJSON數據格式解析.assets\image-20220409104030567.png)

2. GeoJSON對象

GeoJSON總是由一個單獨的對象組成。這個對象(指的是下面的GeoJSON對象)表示幾何、特征或者特征集合。

  • GeoJSON對象可能有任何數目成員(名/值對)。
  • GeoJSON對象必須由一個名字為"type"的成員。這個成員的值是由GeoJSON對象的類型所確定的字符串。
  • type成員的值必須是下面之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"。這兒type成員值必須如這兒所示。
    • Mapbox GL不支持Geometry Collection
  • GeoJSON對象可能有一個可選的"crs"成員,它的值必須是一個坐標參考系統的對象(見3.坐標參考系統對象)。
  • GeoJSON對象可能有一個"bbox"成員,它的值必須是邊界框數組(見4.邊界框)。

2.1 位置

2.1.1 面

對類型"Polygon"來說,"coordinates"成員必須是一個線性環坐標數組的數組。對擁有多個環的的面來說,第一個環必須是外部環,其他的必須是內部環或者孔。

第一個面是大面,如果有第二個面就認為這第二個面是一個洞

附錄A.集合例子

下面例子中的每一個都表示一個完整的GeoJSON對象。注意JSON對象里的結尾的空白字符沒有意義。例子里所用的空白符有助於說明這個數據結構,不過不是必需的。

// 點坐標是按照x,y順序的(投影坐標的東向、北向,地理坐標的長度、高度):
// coordinates是一個一維數組,第一個是x,第二個是y
{ "type": "Point", "coordinates": [100.0, 0.0] }

// 線的坐標是位置數組,二維數組,兩點確定一條直線
{ "type": "LineString",
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
  }

// 面的坐標是線性環坐標數組的數組。這個數組的第一個元素表示的是外部環。其他后續的元素表示的內部環(或者孔)。
// 沒有孔的:
// 二維數組:四邊形用5個點表示,最后一個點閉合回初始位置
{ "type": "Polygon",
  "coordinates": [
    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
    ]
 }

// 有孔的:
// 一個洞的面是三維數組
{ "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": "MultiPolygon",
  "coordinates": [
      // 無孔面
    [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
      // 有孔面
    [[[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]]]
    ]
  }

![image-20220409104047274](D:\10. OSM\02. tippecanoe筆記\06.GeoJSON數據格式解析.assets\image-20220409104047274.png)

![image-20220409104102163](D:\10. OSM\02. tippecanoe筆記\06.GeoJSON數據格式解析.assets\image-20220409104102163.png)

![image-20220409104114976](D:\10. OSM\02. tippecanoe筆記\06.GeoJSON數據格式解析.assets\image-20220409104114976.png)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM