GeoJSON 数据简介

关注我,带你一起学GIS ^

注:当前使用的是 ol [9.2.4] 版本,天地图使用的key请到天地图官网申请,并替换为自己的key

前言

GeoJSON是一种用于编码各种地理数据结构的格式,采用JSON方式表示。在WebGIS开发中,被广泛应用于数据传输和共享交换。

1. GeoJSON数据格式

GeoJSON对象类型多样,具有Geometry类型:Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon以及GeometryCollection,要素类型Feature和要素集类型FeatureCollection九大类。几何对象(Geometry)加上属性信息(Properties)构成要素(Feature),要素集(Features)组成要素集合(FeatureCollection),其逻辑关系如下图。

图1几何对象组成结构图图2几何对象包含结构图

2. GeoJSON对象结构特点

GeoJSON对象表示几何对象(Geometry)、要素对象(Feature)、以及要素类对象(Features)的集合(FeatureCollection),具有如下特征。

  • 每一个GeoJSON对象都是JSON对象
  • 每一个GeoJSON对象都具有一个type属性,其值必须是GeoJSON类型,以上九大类型之一。
  • GeoJSON对象还可能具有"bbox"属性,其值必须是边界范围数组。
  • GeoJSON对象还可能具有其他属性,如用户自定义属性。

3. GeoJSON几何对象

3.1. GeoJSON-Point

Point属性coordinates是一个数组,在投影坐标系中按[x,y]顺序显示,在地理坐标系中按经度和纬度[longitude,latitude]显示。

{
   "type""Point",
   "coordinates": [100.0, 0.0]
}

3.2. GeoJSON-LineString

LineString属性coordinates是一个数组,元素为Point数组坐标对。

{
   "type""LineString",
   "coordinates": [
       [100.0, 0.0],
       [101.0, 1.0]
   ]
}

3.3. GeoJSON-Polygon

Polygon属性coordinates是一个数组,元素为LineString线性环数组。数组的第一个元素表示外环,任何后续元素表示内环。无孔洞

{
   "type""Polygon",
   "coordinates": [
       [
           [100.0, 0.0],
           [101.0, 0.0],
           [101.0, 1.0],
           [100.0, 1.0],
           [100.0, 0.0]
       ]
   ]
}

有孔洞

{
   "type""Polygon",
   "coordinates": [
       // 外环
       [
           [100.0, 0.0],
           [101.0, 0.0],
           [101.0, 1.0],
           [100.0, 1.0],
           [100.0, 0.0]
       ],
       // 内环
       [
           [100.8, 0.8],
           [100.8, 0.2],
           [100.2, 0.2],
           [100.2, 0.8],
           [100.8, 0.8]
       ]
   ]
}

3.4. GeoJSON-MultiPoint

MultiPoint属性coordinates是一个LineString数组,元素为Point数组。

{
   "type""MultiPoint",
   "coordinates": [
       [100.0, 0.0],
       [101.0, 1.0]
   ]
}

3.5. GeoJSON-MultiLineString

MultiLineString属性coordinates是一个数组,元素为LineString数组。

{
   "type""MultiLineString",
   "coordinates": [
       [
           [100.0, 0.0],
           [101.0, 1.0]
       ],
       [
           [102.0, 2.0],
           [103.0, 3.0]
       ]
   ]
}

3.6. GeoJSON-MultiPolygon

MultiPolygon属性coordinates是一个数组,元素为Polygon数组。

{
   "type""MultiPolygon",
   "coordinates": [
       [
           [
               [102.0, 2.0],
               [103.0, 2.0],
               [103.0, 3.0],
               [102.0, 3.0],
               [102.0, 2.0]
           ]
       ],
       [
           [
               [100.0, 0.0],
               [101.0, 0.0],
               [101.0, 1.0],
               [100.0, 1.0],
               [100.0, 0.0]
           ],
           [
               [100.2, 0.2],
               [100.2, 0.8],
               [100.8, 0.8],
               [100.8, 0.2],
               [100.2, 0.2]
           ]
       ]
   ]
}

3.7. GeoJSON-GeometryCollection

GeometryCollection属性geometries是一个数组,元素为geometry对象。

{
  "type""GeometryCollection",
  "geometries": [
    {
      "type""Point",
      "coordinates": [100.0, 0.0]
    }, 
    {
      "type""LineString",
      "coordinates": [
        [101.0, 0.0],
        [102.0, 1.0]
      ]
    }
  ]
}

4. GeoJSON要素对象

要素Feature对象type属性为"Feature",由几何对象和属性信息构成。

{
  "type""Feature",
  "geometry": {
    "type""Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name""Dinagat Islands"
  }
}

5. GeoJSON要素集对象

要素FeatureCollection对象type属性为"FeatureCollection",由features数组构成。元素是Feature对象。

{
   "type""FeatureCollection",
   "features": [{
       "type""Feature",
       "geometry": {
           "type""Point",
           "coordinates": [102.0, 0.5]
       },
       "properties": {
           "prop0""value0"
       }
   }, {
       "type""Feature",
       "geometry": {
           "type""LineString",
           "coordinates": [
               [102.0, 0.0],
               [103.0, 1.0],
               [104.0, 0.0],
               [105.0, 1.0]
           ]
       },
       "properties": {
           "prop0""value0",
           "prop1": 0.0
       }
   }, {
       "type""Feature",
       "geometry": {
           "type""Polygon",
           "coordinates": [
               [
                   [100.0, 0.0],
                   [101.0, 0.0],
                   [101.0, 1.0],
                   [100.0, 1.0],
                   [100.0, 0.0]
               ]
           ]
       },
       "properties": {
           "prop0""value0",
           "prop1": {
               "this""that"
           }
       }
   }]
}

6. 注意

  • GeoJSON坐标对是经度在前,纬度在后,即[longitude,latitude]
  • GeoJSON遵循右手规则,即外环为逆时针,内环为顺时针。
  • GeoJSON数据都有一个type属性,Geometry对象为对应Geometry类型值,Feature对象为"Feature"FeatureCollection对象为"FeatureCollection"
  • GeoJSON数据可能会有额外属性"bbox"或者用户自定义属性,"bbox"值为:["west", "south", "east", "north"],即[xmin,ymin,xmax,ymax]

OpenLayers示例数据下载,请在公众号后台回复:ol数据

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试

GIS之路公众号已经接入了智能助手,欢迎大家前来提问。

欢迎访问我的博客网站-长谈GIShttp://shanhaitalk.com

都看到这了,不要忘记点赞、收藏+关注 

本号不定时更新有关 GIS开发  相关内容,欢迎关注 

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部