2022-04-09 10:46阅读: 2585评论: 0推荐: 0

GeoJSON数据格式解析

GeoJSON数据格式

https://www.bilibili.com/video/BV1VK4y1M78n?spm_id_from=333.337.search-card.all.click

Mapbox和PostGis里面常用的数据格式是GeoJSON

TopoJSON压缩率比GeoJSON更高

TopoJSON 是 GeoJSON 的扩展,增加了拓扑逻辑的编码。

TopoJSON 文件中的几何图形不是独立地表示,而是由共享的线段(称为弧线)拼接而成。TopoJSON 消除了冗余,提供了比 GeoJSON 更紧凑的几何表示;典型的 TopoJSON 文件比 GeoJSON 等价文件小 80%。此外,TopoJSON 还为使用拓扑的应用提供了便利,如拓扑保护形状简化、自动地图着色和制图。

GeoJSON手册

网址:https://geojson.org/

GeoJSON 是一种用于编码各种地理数据结构的格式。

// Feature:表示这是一个要素
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}

GeoJSON 支持以下几何类型:PointLineString(线)、 Polygon(面)、MultiPointMultiLineStringMultiPolygon。具有附加属性的几何对象是Feature对象。特征集包含在FeatureCollection对象中。

  • MultiPolygon:这个面覆盖着好多的小岛
  • FeatureCollection(要素集合):多个Feature放在一起,一个要素集合也是一个标准的Geojson格式
  • 单独一个点,一个线,一个面也是一个标准的Geojson格式

GeoJSON格式规范说明

https://www.oschina.net/translate/geojson-spec

1. GeoJSON特征集合

// 前后台开发使用的时候FeatureCollection只会寸一种类型,要么是点,要么是线,要么是面
{ "type": "FeatureCollection",			// type标识这一段是什么东西:Feature的集合
  "features": [
    { "type": "Feature",				// 一个Feature要素是包含图形和属性在一起的
     	// geometry里面也是一个对象,对象里面的type就是点线面、多点、多线、多面六种
      "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},	// geometry:图形
      "properties": {"prop0": "value0"}								// properties:属性
      },
      // 一个Feature里type和geometry是必须的,properties不是必须的
    { "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"}
         }
       }
     ]
   }

解析Geojson的网站:http://geojson.io/#map=2/50.5/50.3

// 一个geometry可以被geojson.io进行解析,所以一个geomtry也可以被称为genjson
{
        "type": "LineString",
        "coordinates": [
          [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
          ]
        }

!![image-20220409103908484](D:\10. OSM\02. tippecanoe笔记\06.GeoJSON数据格式解析.assets\image-20220409103908484.png)

// 一个Feature也被认为是一个标准的geojson
{ "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
        }
      }

!![image-20220409104011427](D:\10. OSM\02. tippecanoe笔记\06.GeoJSON数据格式解析.assets\image-20220409104011427.png)

// 标准的FeatureCollection格式
{
  "type": "FeatureCollection",
  "features": [
    { "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
        }
      }]
}

![image-20220409104030567](D:\10. OSM\02. tippecanoe笔记\06.GeoJSON数据格式解析.assets\image-20220409104030567.png)

2. GeoJSON对象

GeoJSON总是由一个单独的对象组成。这个对象(指的是下面的GeoJSON对象)表示几何、特征或者特征集合。

  • GeoJSON对象可能有任何数目成员(名/值对)。
  • GeoJSON对象必须由一个名字为"type"的成员。这个成员的值是由GeoJSON对象的类型所确定的字符串。
  • type成员的值必须是下面之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"。这儿type成员值必须如这儿所示。
    • Mapbox GL不支持Geometry Collection
  • GeoJSON对象可能有一个可选的"crs"成员,它的值必须是一个坐标参考系统的对象(见3.坐标参考系统对象)。
  • GeoJSON对象可能有一个"bbox"成员,它的值必须是边界框数组(见4.边界框)。

2.1 位置

2.1.1 面

对类型"Polygon"来说,"coordinates"成员必须是一个线性环坐标数组的数组。对拥有多个环的的面来说,第一个环必须是外部环,其他的必须是内部环或者孔。

第一个面是大面,如果有第二个面就认为这第二个面是一个洞

附录A.集合例子

下面例子中的每一个都表示一个完整的GeoJSON对象。注意JSON对象里的结尾的空白字符没有意义。例子里所用的空白符有助于说明这个数据结构,不过不是必需的。

// 点坐标是按照x,y顺序的(投影坐标的东向、北向,地理坐标的长度、高度):
// coordinates是一个一维数组,第一个是x,第二个是y
{ "type": "Point", "coordinates": [100.0, 0.0] }

// 线的坐标是位置数组,二维数组,两点确定一条直线
{ "type": "LineString",
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
  }

// 面的坐标是线性环坐标数组的数组。这个数组的第一个元素表示的是外部环。其他后续的元素表示的内部环(或者孔)。
// 没有孔的:
// 二维数组:四边形用5个点表示,最后一个点闭合回初始位置
{ "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.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
    ]
 }

// 多面的坐标是面坐标数组的数组
{ "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.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
    ]
  }

![image-20220409104047274](D:\10. OSM\02. tippecanoe笔记\06.GeoJSON数据格式解析.assets\image-20220409104047274.png)

![image-20220409104102163](D:\10. OSM\02. tippecanoe笔记\06.GeoJSON数据格式解析.assets\image-20220409104102163.png)

![image-20220409104114976](D:\10. OSM\02. tippecanoe笔记\06.GeoJSON数据格式解析.assets\image-20220409104114976.png)

本文作者:风帆远航

本文链接:https://www.cnblogs.com/flying-birds-xyg/p/16121111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   风帆远航  阅读(2585)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.