GeoJSON格式規范說明


GeoJSON格式規范說明

英文原文:The GeoJSON Format Specification
中英文對照

GeoJSON是基於JavaScript對象表示法的地理空間信息數據交換格式。

1.簡介

GeoJSON是一種用於編碼各種地理數據結構的數據。GeoJSON對象可以表示幾何、特征或特征集合。GeoJSON支持以下幾何類型:點(Point)、線(LineString)、面(Polygon)、多點(MultiPoint)、多線(MultiLineString)、多面(MultiPolygon)和幾何集合(GeometryCollection)。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"
                }
            }
        }
    ]
}

1.2.定義

  • JavaScript對象(JSON)以及術語對象、名字、值、數組和數字在IETF RFC 4627里定義。
  • 本文檔里的關鍵詞“必須”,“不允許”,“需要”,“應當”,“應當不”,“應該”,“不應該”,“推薦”,“可以”和“可選的”在IETF RFC 2119里解釋。

2.GeoJSON對象

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

  • GeoJSON對象可以包含任意數量的成員(名稱/值對)。
  • GeoJSON對象必須由一個名字為“type”的成員。此成員的值是一個字符串,用於確定GeoJSON對象的類型。
  • type的值必須是如下之一:"Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","Feature"或者"FeatureCollection"。type值的大小寫必須如此處所示。
  • GeoJSON對象可以有一個可選“crs”成員,其值必須是坐標參考系統對象。
  • GeoJSON對象可以有一個“bbox”成員,其值必須是一個邊界框數組。

2.1.幾何對象

幾何是一種GeoJSON對象,這時type屬性的值是下面字符串之一:"Point","MultiPoint","LineString","MultiLineString","Polygn","MultiPolygon",或者"GeometryCollection"。

除了"GeometryCollection"外的其他任何類型的GeoJSON幾何對象必須由一個名稱為"coordinates(坐標)"的屬性。coordinates屬性的值總是數組。這個數組里的元素的結構由幾何類型來確定。

2.1.1.位置(坐標)

位置是基本的幾何結構。"coordinates"幾何對象的成員由一個位置(在Point幾何體的情況下),位置數組(LineString或MultiPoint幾何的請看下),位置數組的數組(Polygons,MultiLineString)或多維位置數組組成(MultiPolygon)。

位置由數字數組表示。必須至少有兩個元素,可能更多。元素的順序必須遵循x,y,z順序(投影坐標參考系統中坐標的東向、北向、高度,或地理坐標參考系統中坐標的經度,緯度,高度)。允許任意數量的附加元素-附加元素的解釋和含義超出了本規范的范圍。

2.1.2.點

對於類型"Point","coordinates"屬性必須是單個坐標。

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

2.1.3.多點

對於類型"MultiPoint","coordinates"屬性必須是一個坐標數組。

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

2.1.4.線

對於類型"LineString","coordinates"屬性必須是兩個或兩個以上的坐標數組。

線性環是具有4個或者更多坐標的封閉的線。第一個和最后一個位置是相等的(它們表示相同的點)。雖然線性環沒有明確表示為GeoJSON幾何類型,但它在多邊形幾何類型定義中有提到它。

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

2.1.5.多線

對類型"MultiLineString"來說,"coordinates"屬性必須是LineString坐標數組的數組。

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

2.1.6 面

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

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

2.1.7.多面

對類型"MultiPlygon"來說,"coordinates"屬性必須是面坐標數組的數組。

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

2.1.8.幾何集合

類型為"GeometryCollection"的GeoJSON對象是一個集合對象,它表示幾何對象的集合。

幾何集合必須由一個名稱為"geometries"的屬性。與"geometries"相對應的值是一個數組。這個數組中的每一個元素都是一個GeoJSON幾何對象。

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

2.2.特征對象

類型為"Feature"的GeoJSON對象是特征對象。

  • 特征對象必須具有一個名為"geometry"的屬性,該屬性的值是上面定義的幾何對象或JSON null值。
  • 特征對象必須具有一個名為"properties"的屬性,該屬性的值是一個對象(任何JSON對象或者null值)。
  • 如果特征是常用的標識符,那么這個標識符應當包含名為"id"的屬性。

2.3.特征集合對象

類型為"FeatureCollection"的GeoJSON對象是特征集合對象。

類型為"FeatureCollection"的對象必須有一個名字為"features"的屬性,該屬性的值是一個數組,這個數組中的每個元素都是上面定義的特征對象。

3.坐標參考系統對象

GeoJSON對象的坐標參考系統(CRS)是由它的屬性"crs"(指的是下面的CRS對象)來確定的。如果對象沒有crs屬性,那么它的父對象或者祖父對象的crs屬性可能被獲取作為它的crs。如果這樣還沒有獲得crs屬性,那么默認的crs將應用到GeoJSON對象。

  • 默認的CRS是一個地理坐標參考系統,使用的是WGS84數據,以十進制的經緯度作為單位。
  • "crs"屬性的值必須是JSON對象,或者null。如果crs的值為null,那么就相當於沒有crs了。
  • "crs"屬性應該位於GeoJSON對象層次結構中的頂級,並且不應再對象的子項或孫子項上重復或覆蓋。
  • 非null的"crs"對象必須由兩個必須的屬性:"type"和"properties"。
  • "type"屬性的值必須是字符串,表示CRS對象的類型。
  • "properties"屬性的值必須是對象。
  • CRS不得更改坐標排序。

3.1.CRS

CRS對象可以通過名稱來指示坐標參考系統。在這種情況下,它的"type"屬性的值必須是字符串"name"。它的"properties"屬性的值必須是包含"name"屬性的對象。這個"name"屬性的值必須是標識坐標參考系統的字符串。OGC CRS URNs such as "urn:ogc:def:crs:OGC:1.3:CRS84" shall be preferred over legacy identifiers such as "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.鏈接對象

鏈接對象由一個必須的屬性"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": [
        ...
    ]
}

5.附錄

Type Examples
Point
{
    "type": "Point",
    "coordinates": [30, 10]
}
MultiPoint
{
    "type": "MultiPoint", 
    "coordinates": [
        [10, 40], [40, 30], [20, 20], [30, 10]
    ]
}
LineString
{
    "type": "LineString",
    "coordinates": [
        [30, 10], [10, 30], [40, 40]
    ]
}
MultiLineString
{
    "type": "MultiLineString", 
    "coordinates": [
        [[10, 10], [20, 20], [10, 40]], 
        [[40, 40], [30, 30], [40, 20], [30, 10]]
    ]
}
Polygon
{
	"type": "Polygon", 
	"coordinates": [
		[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]
	]
}
{
    "type": "Polygon", 
    "coordinates": [
        [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], 
        [[20, 30], [35, 35], [30, 20], [20, 30]]
    ]
}
MultiPolygon
{
    "type": "MultiPolygon", 
    "coordinates": [
        [
            [[30, 20], [45, 40], [10, 40], [30, 20]]
        ], 
        [
            [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]
        ]
    ]
}
{
    "type": "MultiPolygon", 
    "coordinates": [
        [
            [[40, 40], [20, 45], [45, 30], [40, 40]]
        ], 
        [
            [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], 
            [[30, 20], [20, 15], [20, 25], [30, 20]]
        ]
    ]
}


免責聲明!

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



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