GEOJSON数据格式解析

myskies
English

最近想通过echarts来实现一些自定义的地图,接触到了一种地图的数据格式GeoJSONGeo是地理坐标的意思,然后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分别为FeatureCollectionFeature,分别代表特征值集合特征值

查询rfc7946白皮书可得:当typeFeatureCollection时,其必然还拥有一个features值,该值的类型是一个JSON数组,每一个数据的类型均是一个Feature

白皮书同时还给出了Feature特征值的的说明:

  • 拥有一个geometry属性,该属性的值的类型是object, 作用是对其图型的进行描述(定义),如果当前特征值还没有确认,则给其赋值为null。
  • 拥有一个properties属性。该属性的值的类型是object或是null。它定义了地图的相关属性。
  • 如果该特征值需要规定一个标识符(ID),那么这个标识符应该使用字符串或是数字的形式。

阅读完白皮书我们大概了解到:一个地图是由一个或多个Feature组成的,每个Feature会定义一些属性(properties)以及地图的边界数据(geometry)。

Geometry

Geometry译为几何图形,它是整个地图的核心,其中的数据决定了地图长什么样子。

几何形状的种类有PositionPointMultiPointLineStringMultiLineStringPolygonMultiPolygonGeometryCollection。分别代表:位置,单点多点, 线,多条线,多边形,多个多边型几何形状集合

该种类由type关键字来规定,比如我们下载到的地图文件的type值为MultiPolygon:

        "geometry":
        {
            "type": "MultiPolygon",

表示该几何形状由多个多边形组成。

而具体的地图的数据则被定义在coordinates中,当type不同时coordinates的类型也不同。

解读

通过学习白皮书,结合我们下载的地图文件,我们大概了解到:

  1. 一个地图文件由一个或多个特征值Feature组成,如果我们愿,则可以为每个特征值起个名字。
  2. 每个特定值下都可以规定一个几何形状。
  3. 当一个几何形状不足以满足要求时,还可以将几何形状的类型声明为GeometryCollection以定义多个几何形状。
  4. 需要为每个几何形状都指定好类型,该类型为:点、线、多边形等。

有了上述的数据格式,其它的地图软件便可以根据读取后的数据绘制地图了。

中空地图

一般的地图都可以通过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白皮书

阅读 1.6k

河北工业大学梦云智软件开发团队
河北工业大学梦云智软件开发团队
2.1k 声望
54 粉丝
0 条评论
2.1k 声望
54 粉丝
文章目录
宣传栏