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手冊
GeoJSON 是一種用於編碼各種地理數據結構的格式。
// Feature:表示這是一個要素
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}
}
GeoJSON 支持以下幾何類型:Point
、LineString
(線)、 Polygon
(面)、MultiPoint
、MultiLineString
和MultiPolygon
。具有附加屬性的幾何對象是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]
]
}
!
// 一個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
}
}
!
// 標准的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
}
}]
}

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


