1. 程式人生 > 實用技巧 >GeoJSON格式規範說明

GeoJSON格式規範說明

1.簡介

GeoJSON是一種對各種地理資料結構進行編碼的格式。GeoJSON物件可以表示幾何、特徵或者特徵集合。GeoJSON支援下面幾何型別:點、線、面、多點、多線、多面和幾何集合。GeoJSON裡的特徵包含一個幾何物件和其他屬性,特徵集合表示一系列特徵。

一個完整的GeoJSON資料結構總是一個(JSON術語裡的)物件。在GeoJSON裡,物件由名/值對--也稱作成員的集合組成。對每個成員來說,名字總是字串。成員的值要麼是字串、數字、物件、陣列,要麼是下面文字常量中的一個:"true","false"和"null"。陣列是由值是上面所說的元素組成。

1.1.舉例

GeoJSON特徵集合:

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

2.GeoJSON物件

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

  • GeoJSON物件可能有任何數目成員(名/值對)。

  • GeoJSON物件必須由一個名字為"type"的成員。這個成員的值是由GeoJSON物件的型別所確定的字串。

  • type成員的值必須是下面之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"。這兒type成員值必須如這兒所示。

  • GeoJSON物件可能有一個可選的"crs"成員,它的值必須是一個座標參考系統的物件(見3.座標參考系統物件)。

  • GeoJSON物件可能有一個"bbox"成員,它的值必須是邊界框陣列(見4.邊界框)。

2.1幾何物件

幾何是一種GeoJSON物件,這時type成員的值是下面字串之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", 或者"GeometryCollection"。

除了“GeometryCollection”外的其他任何型別的GeoJSON幾何物件必須由一個名字為"coordinates"的成員。coordinates成員的值總是陣列。這個數組裡的元素的結構由幾何型別來確定。

2.1.1.位置

位置是基本的幾何結構。幾何物件的"coordinates"成員由一個位置(這兒是幾何點)、位置陣列(線或者幾何多點),位置陣列的陣列(面、多線)或者位置的多維陣列(多面)組成。

位置由數字陣列表示。必須至少兩個元素,可以有更多元素。元素的順序必須遵從x,y,z順序(投影座標參考系統中座標的東向、北向、高度或者地理座標參考系統中的座標長度、緯度、高度)。任何數目的其他元素是允許的---其他元素的說明和意義超出了這篇規格說明的範圍。

2.1.2.點 2.1.3.多點

對型別"MultiPoint"來說,"coordinates"成員必須是位置陣列。

2.1.4.線

線性環市具有4個或者更多位置的封閉的線。第一個和最後一個位置是相等的(它們表示相同的的點)。雖然線性環沒有鮮明地作為GeoJSON幾何型別,不過在面幾何型別定義裡有提到它。

2.1.5.多線 2.1.6.面

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

2.1.7.多面 2.1.8.幾何集合

型別為"GeometryCollection"的GeoJSON物件是一個集合物件,它表示幾何物件的集合。

幾何集合必須有一個名字為"geometries"的成員。與"geometries"相對應的值是一個數組。這個陣列中的每個元素都是一個GeoJSON幾何物件。

2.2.特徵物件

型別為"Feature"的GeoJSON物件是特徵物件。

  • 特徵對戲那個必須有一個名字為“properties"的成員,這個屬性成員的值是一個物件(任何JSON物件或者JSON的null值)。

  • 如果特徵是常用的識別符號,那麼這個識別符號應當包含名字為“id”的特徵物件成員。

2.3.特徵集合物件

型別為"FeatureCollection"的GeoJSON物件是特徵集合物件。

型別為"FeatureCollection"的物件必須由一個名字為"features"的成員。與“features"相對應的值是一個數組。這個陣列中的每個元素都是上面定義的特徵物件。

3.座標參考系統物件

GeoJSON物件的座標參考系統(CRS)是由它的"crs"成員(指的是下面的CRS物件)來確定的。如果物件沒有crs成員,那麼它的父物件或者祖父物件的crs成員可能被獲取作為它的crs。如果這樣還沒有獲得crs成員,那麼預設的CRS將應用到GeoJSON物件。

  • 預設的CRS是地理座標參考系統,使用的是WGS84資料,長度和高度的單位是十進位制標示。

  • 名字為"crs"成員的值必須是JSON物件(指的是下面的CRS物件)或者JSON的null。如果CRS的值為null,那麼就假設沒有CRS了。

  • crs成員應當位於(特徵集合、特徵、幾何的順序的)層級結構裡GeoJSON物件的最頂級,而且在自物件或者孫子物件裡不應該重複或者覆蓋。

  • 非空的CRS物件有兩個強制擁有的物件:"type"和"properties"。

  • type成員的值必須是字串,這個字串說明了CRS物件的型別。

  • 屬性成員的值必須是物件。

  • CRS應不能更改座標順序(見2.1.1.位置)。

3.1. 名字CRS

CRS物件可以通過名字來表明座標參考系統。在這種情況下,它的"type"成員的值必須是字串"name"。它的"properties"成員的值必須是包含"name"成員的物件。這個"name"成員的值必須是標識座標參考系統的字串。比如“urn:ogc:def:crs:OGC:1.3:CRS84"的OGC CRS的URN應當優先於舊的識別符號如"EPSG:4326"得到選用:

"crs": {
"type": "name",
"properties": {
"name": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
}

3.2. 連線CRS

CRS物件也可以連線到網際網路上的CRS引數。在這種情況下,它的"type"成員的值必須是字串"link",它的"properties"成員的值必須是一個連線物件(見3.2.1.連線物件) 。

3.2.1.連線物件

連線物件由一個必需的成員:"href",和一個可選的成員:"type"。

必需的"href"成員的值必須是解引用的URI(統一資源標識)。

可選的"type"成員的值必須是字串,而且這個字串暗示了所提供的URI裡用來表示CRS引數的格式。建議值是:"proj4","ogcwkt",esriwkt",不過可以使用其他值:

"crs": {
"type": "link",
"properties": {
"href": "http://example.com/crs/42",
"type": "proj4"
}
}

相對連線常常可以作為輔助檔案裡的CRS的直接處理器:

"crs": {
"type": "link",
"properties": {
"href": "data.crs",
"type": "ogcwkt"
}
}

4.邊界框

為了包含幾何、特徵或者特徵集合的座標範圍資訊,GeoJSON物件可能有一個名字為"bbox的成員。bbox成員的值必須是2*n陣列,這兒n是所包含幾何物件的維數,並且所有座標軸的最低值後面跟著最高者值。bbox的座標軸的順序遵循幾何座標軸的順序。除此之外,bbox的座標參考系統假設匹配它所在GeoJSON物件的座標參考系統。

特徵物件上的bbox成員的例子:

{ "type": "Feature",
"bbox": [-180.0, -90.0, 180.0, 90.0],
"geometry": {
"type": "Polygon",
"coordinates": [[
[-180.0, 10.0], [20.0, 90.0], [180.0, -5.0], [-30.0, -90.0]
]]
}
...
}

特徵集合物件bbox成員的例子:

{ "type": "FeatureCollection",
"bbox": [100.0, 0.0, 105.0, 1.0],
"features": [
...
]
}

集合例子

下面例子中的每一個都表示一個完整的GeoJSON物件。注意JSON物件裡的結尾的空白字元沒有意義。例子裡所用的空白符有助於說明這個資料結構,不過不是必需的。

點座標是按照x,y順序的(投影座標的東向、北向,地理座標的長度、高度):

{ "type": "Point", "coordinates": [100.0, 0.0] }

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

面的座標是線性環座標陣列的陣列。這個陣列的第一個元素表示的是外部環。其他後續的元素表示的內部環(或者孔)。

沒有孔的:

{ "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": "MultiPoint",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}

多線

{ "type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
}

多面

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

幾何集合

{ "type": "GeometryCollection",
"geometries": [
{ "type": "Point",
"coordinates": [100.0, 0.0]
},
{ "type": "LineString",
"coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
}
]
}

轉自  https://www.oschina.net/translate/geojson-spec?lang=chs&p=1