7.GeoJSON和TopoJSON 17:11
思維導圖.png
GeoJSON 和 TopoJSON 是符合 JSON 語法規(guī)則的兩種數(shù)據(jù)格式,用于表示地理信息枝笨。
一争便、 GeoJSON
(一)概念:
GeoJSON 是用于描述地理空間信息的數(shù)據(jù)格式。GeoJSON 不是一種新的格式富纸,其語法規(guī)范是符合 JSON 格式的审姓,只不過對其名稱進行了規(guī)范珍特,專門用于表示地理信息。
GeoJSON 的最外層是一個單獨的對象(object)魔吐。這個對象可表示:
- 幾何體(Geometry)扎筒。
- 特征(Feature)。
- 特征集合(FeatureCollection)酬姆。
最外層的 GeoJSON 里可能包含有很多子對象嗜桌,每一個 GeoJSON 對象都有一個 type 屬性,表示對象的類型辞色,type 的值必須是下面之一骨宠。
- Point:點。
- MultiPoint:多點相满。
- LineString:線层亿。
- MultiLineString:多線。
- Polygon:面立美。
- MultiPolygon:多面匿又。
- GeometryCollection:幾何體集合。
- Feature:特征建蹄。
- FeatureCollection:特征集合碌更。
(二)下面舉幾個例子。
1) 如果 type 的值為 Point躲撰、MultiPoint针贬、LineString、MultiLineString拢蛋、Polygon、MultiPolygon 之一蔫巩,則該對象必須有變量 coordinates谆棱。
點對象:
{
"type": "Point",
"coordinates": [ -105, 39 ]
}
線對象:
{
"type": "LineString",
"coordinates": [[-105, 39 ], [-107, 38 ]]
}
面對象:
{
"type": "Polygon",
"coordinates":[[ [30, 0], [31, 0], [31, 5], [30, 5], [30, 0] ]]
}
由以上格式可以發(fā)現(xiàn)快压,每一個對象都有一個成員變量 coordinates。
2) 如果 type 的值為 GeometryCollection(幾何體集合)垃瞧,那么該對象必須有變量 geometries蔫劣,其值是一個數(shù)組,數(shù)組的每一項都是一個 GeoJSON 的幾何對象个从。例如:
{
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100, 40]
},
{
"type": "LineString",
"coordinates": [ [100, 30], [100, 35] ]
}
]
}
3) 如果 type 的值為 Feature(特征)脉幢,那么此特征對象必須包含有變量 geometry,表示幾何體嗦锐,geometry 的值必須是幾何體對象嫌松。此特征對象還包含有一個 properties,表示特性奕污,properties 的值可以是任意 JSON 對象或 null萎羔。例如:
{
"type": "Feature",
"properties": {
"name": "北京"
},
"geometry": {
"type": "Point",
"coordinates": [ 116.3671875, 39.977120098439634]
}
}
4) 如果 type 的值為 FeatureCollection(特征集合),則該對象必須有一個名稱為 features 的成員碳默。features 的值是一個數(shù)組贾陷,數(shù)組的每一項都是一個特征對象。
二嘱根、 TopoJSON
TopoJSON 是 GeoJSON 按拓撲學編碼后的擴展形式髓废,是由 D3 的作者 Mike Bostock 制定的。相比 GeoJSON 直接使用 Polygon该抒、Point 之類的幾何體來表示圖形的方法瓦哎,TopoJSON 中的每一個幾何體都是通過將共享邊(被稱為arcs)整合后組成的。
TopoJSON 消除了冗余柔逼,文件大小縮小了 80%蒋譬,因為:
邊界線只記錄一次(例如廣西和廣東的交界線只記錄一次)。
地理坐標使用整數(shù)愉适,不使用浮點數(shù)犯助。
三、 在線工具
在線生成 GeoJSON:http://geojson.io/
簡化维咸、轉(zhuǎn)換 GeoJSON 和 TopoJSON:http://mapshaper.org/