最近想通过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白皮书
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。