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手冊
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]
]
}
!![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)