GeoJSON 数据简介

前言

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]显示。

json 复制代码
{
   "type": "Point",
   "coordinates": [100.0, 0.0]
}

3.2. GeoJSON-LineString

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

csharp 复制代码
{
   "type": "LineString",
   "coordinates": [
       [100.0, 0.0],
       [101.0, 1.0]
   ]
}

3.3. GeoJSON-Polygon

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

csharp 复制代码
{
   "type": "Polygon",
   "coordinates": [
       [
           [100.0, 0.0],
           [101.0, 0.0],
           [101.0, 1.0],
           [100.0, 1.0],
           [100.0, 0.0]
       ]
   ]
}

有孔洞

csharp 复制代码
{
   "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数组。

csharp 复制代码
{
   "type": "MultiPoint",
   "coordinates": [
       [100.0, 0.0],
       [101.0, 1.0]
   ]
}

3.5. GeoJSON-MultiLineString

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

csharp 复制代码
{
   "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数组。

csharp 复制代码
{
   "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对象。

csharp 复制代码
{
  "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",由几何对象和属性信息构成。

json 复制代码
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}

5. GeoJSON要素集对象

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

csharp 复制代码
{
   "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开发 相关内容,欢迎关注 !

相关推荐
●VON20 分钟前
使用 Electron 构建天气桌面小工具:调用公开 API 实现跨平台实时天气查询V1.0.0
前端·javascript·electron·openharmony
码上成长23 分钟前
包管理提速:pnpm + Workspace + Changesets 搭建版本体系
前端·前端框架
Bigger27 分钟前
Tauri(十九)——实现 macOS 划词监控的完整实践
前端·rust·app
ganshenml1 小时前
【Web】证书(SSL/TLS)与域名之间的关系:完整、通俗、可落地的讲解
前端·网络协议·ssl
这是个栗子2 小时前
npm报错 : 无法加载文件 npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
HIT_Weston3 小时前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab
华仔啊3 小时前
Vue3 如何实现图片懒加载?其实一个 Intersection Observer 就搞定了
前端·vue.js
JamesGosling6663 小时前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
不要想太多3 小时前
前端进阶系列之《浏览器渲染原理》
前端
g***96904 小时前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js