GeoJSON是基于JavaScript 對象表示法的地理空間信息數(shù)據(jù)交換格式。
一、簡介
GeoJSON是一種對各種地理數(shù)據(jù)結(jié)構(gòu)進行編碼的格式。GeoJSON對象可以表示幾何、特征或者特征集合。GeoJSON支持下面幾何類型:點、線、面、多點、多線、多面和幾何集合。GeoJSON里的特征包含一個幾何對象和其他屬性,特征集合表示一系列特征。
一個完整的GeoJSON數(shù)據(jù)結(jié)構(gòu)總是一個(JSON術語里的)對象。在GeoJSON里,對象由名/值對--也稱作成員的集合組成。對每個成員來說,名字總是字符串。成員的值要么是字符串、數(shù)字、對象、數(shù)組,要么是下面文本常量中的一個:"true","false"和"null"。數(shù)組是由值是上面所說的元素組成。
1.1舉例
{ "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"}
}
}
]
}
二、GeoJson對象
GeoJSON總是由一個單獨的對象組成。這個對象(指的是下面的GeoJSON對象)表示幾何、特征或者特征集合。
- GeoJSON對象可能有任何數(shù)目成員(名/值對)。
- GeoJSON對象必須由一個名字為"type"的成員。這個成員的值是由GeoJSON對象的類型所確定的字符串。
- type成員的值必須是下面之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"。這兒type成員值必須如這兒所示。
- GeoJSON對象可能有一個可選的"crs"成員,它的值必須是一個坐標參考系統(tǒng)的對象。
- GeoJSON對象可能有一個"bbox"成員,它的值必須是邊界框數(shù)組。
2.1 幾何對象
幾何是一種GeoJSON對象,這時type成員的值是下面字符串之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", 或者"GeometryCollection"。
除了“GeometryCollection”外的其他任何類型的GeoJSON幾何對象必須由一個名字為"coordinates"的成員。coordinates成員的值總是數(shù)組。這個數(shù)組里的元素的結(jié)構(gòu)由幾何類型來確定。
2.1.1 位置
位置是基本的幾何結(jié)構(gòu)。幾何對象的"coordinates"成員由一個位置(這兒是幾何點)、位置數(shù)組(線或者幾何多點),位置數(shù)組的數(shù)組(面、多線)或者位置的多維數(shù)組(多面)組成。
位置由數(shù)字數(shù)組表示。必須至少兩個元素,可以有更多元素。元素的順序必須遵從x,y,z順序(投影坐標參考系統(tǒng)中坐標的東向、北向、高度或者地理坐標參考系統(tǒng)中的坐標長度、緯度、高度)。任何數(shù)目的其他元素是允許的---其他元素的說明和意義超出了這篇規(guī)格說明的范圍。
2.1.2 點
對類型"Point"來說,“coordinates"成員必須是一個單獨的位置。
{
"type": "Point",
"coordinates": [100.0, 0.0]
}
2.1.3 多點
對類型"MultiPoint"來說,"coordinates"成員必須是位置數(shù)組。
{
"type": "MultiPoint",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}
2.1.4 線
對類型"LineString"來說,“coordinates"成員必須是兩個或者多個位置的數(shù)組。
線性環(huán)市具有4個或者更多位置的封閉的線。第一個和最后一個位置是相等的(它們表示相同的的點)。雖然線性環(huán)沒有鮮明地作為GeoJSON幾何類型,不過在面幾何類型定義里有提到它。
{
"type": "LineString",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}
2.1.5 多線
對類型“MultiLineString"來說,"coordinates"成員必須是一個線坐標數(shù)組的數(shù)組。
{
"type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
}
2.1.6 面
對類型"Polygon"來說,"coordinates"成員必須是一個線性環(huán)坐標數(shù)組的數(shù)組。對擁有多個環(huán)的的面來說,第一個環(huán)必須是外部環(huán),其他的必須是內(nèi)部環(huán)或者孔。
無孔的:
{
"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"成員必須是面坐標數(shù)組的數(shù)組。
{
"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"相對應的值是一個數(shù)組。這個數(shù)組中的每個元素都是一個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對象或者JSON的null值)。
- 如果特征是常用的標識符,那么這個標識符應當包含名字為“id”的特征對象成員。
2.3 特征對象集合
類型為"FeatureCollection"的GeoJSON對象是特征集合對象。
類型為"FeatureCollection"的對象必須由一個名字為"features"的成員。與“features"相對應的值是一個數(shù)組。這個數(shù)組中的每個元素都是上面定義的特征對象。
參考原文:GeoJSON格式規(guī)范說明