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开发 相关内容,欢迎关注 !

相关推荐
拉不动的猪19 分钟前
pc和移动页面切换的两种基本方案对比
前端·javascript·vue.js
Hilaku26 分钟前
前端日志调试也能专业化?我们这样设计日志系统
前端·javascript
李杰同志8916333 分钟前
iOS moya 实现双token 刷新并重试
前端
前端小巷子38 分钟前
跨标签页通信(五):IndexedDB
前端·面试·浏览器
LaoZhangAI39 分钟前
2025全面评测:Flux AI图像生成器6大模型全解析【专业测评】
前端·后端
PioneerWang40 分钟前
useContext及其原理解析
前端
用户71619128217642 分钟前
告别繁琐的路由配置:vite-plugin-convention-routes 让你的 Vue 项目更优雅
前端
小桥风满袖42 分钟前
Three.js-硬要自学系列34之专项学习几何体
前端·css·three.js
今阳43 分钟前
鸿蒙开发笔记-17-ArkTS并发
android·前端·harmonyos
BUG收容所所长44 分钟前
深入理解 AJAX,从 XMLHttpRequest 到现代 Fetch API
前端·javascript·ajax