最近想通過echarts
來實現一些自定義的地圖,接觸到了一種地圖的資料格式GeoJSON
,Geo
是地理座標的意思,然後JSON
是指json
型別的資料格式。
我們可以通過阿里雲DataV來快速的獲取到一份縣級以上的地圖。而如果想繪製縣級以的地圖,則需要自己想一點辦法。
比如自己去geojson站點去繪製。繪製完成後將最終得到一份型別為JSON
的地圖檔案,格式確切的說為GeoJSON
。
而本文在於解釋GeoJSON
這種資料格式中各項的具體含義。
除了echarts外,其它的地圖元件也基本是基於GeoJSON的,比如:Leaflet
準備
在正式理解GeoJSON
之前,我們先下載一下成型的檔案,以當前筆者所研究的尚義縣為例,我們在阿里雲上下載一個成型檔案。
然後使用sublime
等工具開啟這個檔案並進行格式化。最終發現
一個基本的GeoJSON
檔案有個主要的關鍵字:type
:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties":
{
"adcode": 130725,
"name": "尚義縣",
"center": [113.977713, 41.080091],
"centroid": [114.147607, 41.123316],
"childrenNum": 0,
"level": "district",
"acroutes": [100000, 130000, 130700],
"parent":
{
"adcode": 130700
}
},
"geometry":
{
"type": "MultiPolygon",
"coordinates": [
[
[
[114.35286, 40.73159],
[114.356768, 40.73224]
]
]
]
}
}]
}
注意:以上檔案省略了大部分基礎資料。
type
根級的type
分別為FeatureCollection
和Feature
,分別代表特徵值集合
和特徵值
。
查詢rfc7946白皮書可得:當type
為FeatureCollection
時,其必然還擁有一個features
值,該值的型別是一個JSON
陣列,每一個資料的型別均是一個Feature
。
白皮書同時還給出了Feature
特徵值的的說明:
- 擁有一個
geometry
屬性,該屬性的值的型別是object
, 作用是對其圖型的進行描述(定義),如果當前特徵值還沒有確認,則給其賦值為null。 - 擁有一個
properties
屬性。該屬性的值的型別是object
或是null
。它定義了地圖的相關屬性。 - 如果該特徵值需要規定一個識別符號(ID),那麼這個識別符號應該使用字串或是數字的形式。
閱讀完白皮書我們大概瞭解到:一個地圖是由一個或多個Feature
組成的,每個Feature
會定義一些屬性(properties
)以及地圖的邊界資料(geometry
)。
Geometry
Geometry譯為幾何圖形,它是整個地圖的核心,其中的資料決定了地圖長什麼樣子。
幾何形狀的種類有Position
、Point
、MultiPoint
、LineString
、MultiLineString
、Polygon
、MultiPolygon
、GeometryCollection
。分別代表:位置
,單點
,多點
, 線
,多條線
,多邊形
,多個多邊型
、幾何形狀集合
該種類由type
關鍵字來規定,比如我們下載到的地圖檔案的type
值為MultiPolygon
:
"geometry":
{
"type": "MultiPolygon",
表示該幾何形狀由多個多邊形組成。
而具體的地圖的資料則被定義在coordinates
中,當type
不同時coordinates
的型別也不同。
解讀
通過學習白皮書,結合我們下載的地圖檔案,我們大概瞭解到:
- 一個地圖檔案由一個或多個特徵值
Feature
組成,如果我們願,則可以為每個特徵值起個名字。 - 每個特定值下都可以規定一個幾何形狀。
- 當一個幾何形狀不足以滿足要求時,還可以將幾何形狀的型別宣告為
GeometryCollection
以定義多個幾何形狀。 - 需要為每個幾何形狀都指定好型別,該型別為:點、線、多邊形等。
有了上述的資料格式,其它的地圖軟體便可以根據讀取後的資料繪製地圖了。
中空地圖
一般的地圖都可以通過ali提供的多邊形選擇來獲取,但中空的地圖就不行了。
這時候則需要我們先選中外圈,再選擇內圈,然後下兩個檔案,最後接拼成這的樣子。
{
"type": "Polygon",
"coordinates": [
[[1,2], [3, 4]],
[[5,6], [7, 8]]
]
}
coordinates
中的第一項是外圈,第二項則是內圈.
一定要注意的是,外圈應該是
中空圖形的type是Polygon,第一個座標陣列是外圈座標按逆時針排序,第二個座標陣列是內環按順時針排序;
參考文件(工具)
http://www.thingjs.com/guide/cn/tutorial_city_builder/Data_description/Online_tools.html
https://datav.aliyun.com/portal/school/atlas/area_generator
https://geojson.org/
http://geojson.io/
rfc7946白皮書