最近想通过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
。【GEOJSON数据格式解析】白皮书同时还给出了
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
以定义多个几何形状。 - 需要为每个几何形状都指定好类型,该类型为:点、线、多边形等。
参考文档(工具) 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白皮书