• GeoJson格式标准规范


    GeoJson格式标准规范

    2016 年 8 月发布,取代了 2008 年的 GeoJSON规范成为 GeoJSON 格式的新标准规范。

    标准链接:https://datatracker.ietf.org/doc/html/rfc7946

    0 摘要

    GeoJson 是一种基于 JSON 的地理空间数据交换格式。 它定义了几种类型的 JSON 对象,以及将它们组合起来表示有关地理特征属性空间范围的数据的方式。 GeoJson 使用了经纬度参考系统、 WGS84 坐标系统和十进制单位。

    1 介绍

    GeoJson 是一种使用 JSON 编码对各种地理数据结构进行编码的格式。 GeoJson 对象可以表示一个空间区域(Geometry)、一个空间有界实体(Feature)或一系列特征集合(FeatureCollection)。 GeoJson 支持以下几何类型: PointLineStringPolygonMultiPointMultiLineStringMultiPolygonGeometryCollection。 特征包含一个 Geometry 对象和其他属性,而特征集合包含一个特征列表。

    这种格式从最广泛的意义上讲与地理数据有关,任何具有地理空间界限的特性的东西都可能是一个特征,不管它是否是一个物理结构。 GeoJson 中的概念并不新鲜,它们来自于先前存在的开放地理信息系统标准,并且已经进行了简化,以更好地适应使用 JSONWEB 应用程序开发。

    GeoJson 包含了在 OpenGIS 的简单特征实现规范中定义的七种具体的几何类型: 0 维是 PointMultiPoint;1 维曲线 LineStringMultiLineString; 2 维曲面 PolygonMultiPolygon;异构的 GeometryCollection。 这些几何类型的 GeoJSON 实例类似于在同一规范中描述的二进制(WKB)和文本(WKT)。

    GeoJson 还包含类型 FeatureFeatureCollectionGeoJson 中的 Feature 对象包含一个 Geometry 对象,该对象具有上述几何类型之一和其他属性。 FeatureCollection 对象包含一个 Feature 对象数组。

    自 2008 年首次发布GJ2008以来,GeoJSON 格式规范的流行程度一直在稳步增长。 它广泛应用于 JavaScript 网页地图库、基于 json 的文档数据库和 web API

    1.1 必需的词汇

    本文件中的”必须”、”不得”、”必需”、”应当”、”不应当”、”应该”、”不应该”、”建议”、”不建议”、”可能”和”可选”等关键词应解释为RFC2119所述。

    1.2 本文件中使用的约定

    必须按照RFC7159的指定,将本文档中定义的任何 JSON 对象的成员的顺序视为无关的。

    一些示例使用 JavaScript 语言的单行注释(/ /)和省略号(…)的组合作为作者认为不相关的内容的占位符。 当然,在试图验证相应的JSON 代码示例之前,必须删除或替换这些占位符。

    本文档中的示例使用空格来帮助说明数据结构,但不是必需的。 不带引号的空格在JSON 中不重要。

    1.3 GeoJson 规范

    本文档取代原来的 GeoJSON 格式规范GJ2008。

    1.4 定义

    • JSON,以及术语对象、成员、名称、值、数组、数字、 truefalsenull,将被解释为在RFC7159中的定义。
    • 在本文档中,术语“几何类型”指七个区分大小写的字符串: “ Point”、“ MultiPoint”、“ LineString”、“ MultiLineString”、“ Polygon”、“ MultiPolygon”和“ GeometryCollection”。
    • 作为另一种速记符号,术语“ GeoJSON 类型”指的是九个区分大小写的字符串: “ Feature”、“ FeatureCollection”以及上面列出的几何类型。
    • FeatureCollection”和“ GeometryCollection”中的“ Collection”一词对于数组成员的语义没有任何意义。 这些对象的“ features”和“ geometry”成员分别是标准的有序 JSON 数组,而不是无序集。

    1.5 例子

    一个 GeoJSON类型中的 FeatureCollection 类型:

    {
      "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"
            }
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    2 GeoJson 文本

    GeoJson 文本是 JSON 文本,由单个 GeoJSON 对象组成。

    3 GeoJson 对象

    GeoJson 对象表示一个几何对象、特征或特征集合。

    • 一个 GeoJSON 对象是一个JSON 对象
    • 一个 GeoJSON 对象有一个名为“ type”的成员。 成员的值必须是 GeoJSON 九种类型之一。
    • 一个 GeoJSON 对象可能有一个“bbox”成员,其值必须是一个边界框数组(见 第 5 节)。
    • GeoJSON 对象可能有其他成员(见 第 6 节)。

    3.1 几何对象

    几何对象在坐标空间中表示点、曲线和曲面。 每个 Geometry 对象都是一个 GeoJSON 对象,不管它出现在 GeoJSON 文本的哪个位置。

    • 几何对象的“type”成员的值必须是七种几何类型之一(见 第 1.4 节)。
    • 除了GeometryCollection以外的任何类型的 GeoJSON 几何对象都有一个名为 coordinates的成员。 coordinates成员的值是一个数组。 此数组中元素的结构由几何形状类型决定。 GeoJson 处理器可能将含有空“coordinates”数组的几何对象解释为空对象。
    3.1.1 位置

    位置是基本的几何构造。 几何对象的“coordinates”成员由以下两部分组成:

    • Point 几何情况下有一个位置。
    • LineStringMultiPoint 情况下有一个位置数组。
    • PolygonMultiLineString 情况下有一个 LineString 或 linear ring(见第 3.1.6 节)坐标数组。
    • MultiPolygon情况下有一个 Polygon 坐标数组。

    一个位置是一组数字。 必须有两个或两个以上的元素。 前两个元素是经度和纬度,或者叫做 eastingnorthing,精确地按照这个顺序使用十进制数字。 海拔或高度可作为可选的第三个要素。

    实现时不应该扩展位置超过三个元素,因为额外元素的语义是不确定和模糊的。 历史上,有些实现使用第四个元素来携带线性参考度量值(有时表示为“ m”)或数字时间戳,但在大多数情况下,解析器不能正确解释这些值。 附加元素的解释和含义超出了本规范的范围,附加元素可能会被解析器忽略。

    两个位置之间的直线是笛卡尔坐标系下的直线,也就是坐标系中两点之间最短的直线(见第 4 节)。

    换句话说,在(lon0、 lat0)(lon1、 lat1)之间的一条直线上的每个点不会穿过 180 度经线,这些点可以计算为

    F(lon, lat) = (lon0 + (lon1 - lon0) * t, lat0 + (lat1 - lat0) * t)
    
    • 1

    t是大于等于 0小于等于 1的实数。 请注意,这条线可能明显不同于沿着参考椭球体曲面的测地线路径。

    这同样适用于可选的高度元素,但条件是高度的方向在坐标参考系是指定的。

    请再次注意,这并不意味着高度相等的曲面遵循例如水体的曲率。 同样高度的曲面也不会垂直于铅垂线。

    位置和几何图形的例子见(附录 a)“几何示例“

    3.1.2 Point

    对于类型Pointcoordinates成员是一个位置。

    3.1.3 MultiPoint

    对于类型MultiPointcoordinates成员是位置数组。

    3.1.4 LineString

    对于类型 LineStringcoordinates成员是两个或多个位置的数组。

    3.1.5 MultiLineString

    对于类型MultiLineStringcoordinates成员是 LineString 坐标数组的数组。

    3.1.6 Polygon

    为了指定多边形特有的约束,引入线性环的概念是有用的:

    • 线性环是具有四个或更多位置的闭合 LineString
    • 第一个和最后一个位置是相同的,它们必须包含相同的值; 它们的表示也应该相同。
    • 线性环是曲面的边界或曲面上孔的边界。
    • 线性环必须遵循右手法则,也就是说,外环为逆时针方向,孔为顺时针方向。

    注: (GJ2008)规范没有讨论线性环绕顺序。 为了向后兼容,解析器不应该拒绝不遵循右边规则的多边形。

    虽然线性环没有被显式地表示为 GeoJSON 几何类型,但它导致了 Polygon 几何类型定义的规范化表述如下:

    • 对于类型“Polygon” ,“coordinates”成员必须是一个”线性环坐标数组“组成的数组。
    • 对于多边形有一个以上的环,第一个必须是外环,其他的必须是内环。 外环与表面形成边界,内环(如果存在)与表面形成边界孔。
    3.1.7 MultiPolygon

    对于类型 MultiPolygoncoordinates成员是Polygon 坐标数组组成的数组。

    3.1.8 GeometryCollection

    类型为 GeometryCollectionGeoJSON 对象是一个几何对象。 Geometrycollection 有一个名为 geometries的成员。 geometries的值是一个数组。 这个数组的每个元素都是一个 GeoJSON 几何对象。 这个数组可能是的。

    与上面描述的其他几何类型不同,GeometryCollection 可以是较小几何对象的异构组合。 例如,小写罗马字体“ i”形状的几何对象可以由一个 Point 和一个 LineString 组成。

    Geometrycollections 有不同于单一类型的几何对象(PointLineStringPolygon)和多部分几何对象(MultiPointMultiLineStringMultiPolygon)的语法,但没有不同的语义。 虽然 GeometryCollection 对象没有“coordinates”成员,但它确实有坐标:,其所有部分的坐标都属于该集合。 Geometrycollection 的“geometries”成员描述了这个组合的各个部分。 实现不应该对“geometries”数组应用任何附加语义。

    为了最大化互用性,实现应该避免嵌套的 GeometryCollections。 此外,当可以使用单个部件或多部件类型的单个对象(MultiPointMultiLineStringMultiPolygon)时,应避免使用由单个部件或单个类型的多个部件组成的 GeometryCollections。

    3.1.9 180 度经线切割

    在表示跨越 180 度经线特征时,通过修改它们的几何形状可以提高互操作性。 任何穿过 180 度经线的几何体都应该被切割成两部分,这样任何一部分的表示都不会穿过 180 度经线

    例如,一条从北纬 45 度东经 170 度延伸到北纬 45 度西经 170 度的直线应该被切成两段并表示为 MultiLineString

    {
      "type": "MultiLineString",
      "coordinates": [
        [
          [170.0, 45.0],
          [180.0, 45.0]
        ],
        [
          [-180.0, 45.0],
          [-170.0, 45.0]
        ]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    一个从北纬 40 度东经 170 度北纬 50 度西经 170 度的矩形应该被切割成两个并表示为一个多边形。

    {
      "type": "MultiPolygon",
      "coordinates": [
        [
          [
            [180.0, 40.0],
            [180.0, 50.0],
            [170.0, 50.0],
            [170.0, 40.0],
            [180.0, 40.0]
          ]
        ],
        [
          [
            [-170.0, 40.0],
            [-170.0, 50.0],
            [-180.0, 50.0],
            [-180.0, 40.0],
            [-170.0, 40.0]
          ]
        ]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    3.1.10 不确定性和精确性

    在RFC5870中规定,坐标位置上的数值的位数不能被解释为不确定度级别。

    3.2 特征对象

    一个特征对象表示一个空间上有界的对象。 每个特征对象都是一个 GeoJSON 对象,不管它出现在 GeoJSON 文本的哪个位置。

    • 一个特征对象有一个值为“ Feature”的“type”成员。
    • 一个特征对象有一个名为“ geometry”的成员。 geometry成员的值应该是上面定义的几何对象,或者在功能未定位的情况下为JSON 空值
    • 一个特征对象有一个名为“properties”的成员。 属性成员的值是一个对象(任何JSON 对象JSON 空值)。
    • 如果一个特征有一个常用的标识符,那么这个标识符应该包含在特征对象的名为“ id”的成员中,并且这个成员的值是 JSON 字符串数字

    3.3 特征集合对象

    类型为 FeatureCollectionGeoJSON 对象FeatureCollection 对象。 FeatureCollection 对象有一个名为“ features”的成员。 features的值是一个 JSON 数组。 数组的每个元素都是上面定义的特征对象。 这个数组可能为空。

    4 坐标参考系统

    所有 GeoJSON 坐标的坐标参考系统是同一个地理经纬度坐标参考系统,使用WGS84基准,以十进制经纬度为单位。 这相当于开放地理空间协会标识的坐标引用系统 URN: OGC: def: crs: OGC: : CRS84。 一个可选的第三位元素应该是 WGS 84 参考椭球体以上或以下的高度(米)。 在没有高程值的情况下,对高度或深度敏感的应用程序应该将第三位元素解释为在该坐标的地面或海平面高度。

    注: 备选坐标参考系统在GJ2008)中有规定,但已从本规范版本中删除,因为使用不同的坐标参考系统,特别是以 GJ2008 中规定的方式已证明存在互用性问题。 一般来说,GeoJSON 处理软件不需要访问坐标参考系统数据库或网络访问坐标参考系统转换参数。 然而,如果所有参与方事先都有安排而不会有数据被误解的风险,可以使用其他的坐标参考系统。

    5 边界框

    GeoJson 对象可能有一个名为“bbox”的成员,包含关于其几何对象特征对象特征对象集合坐标范围的信息。 bbox 成员的值必须是一个长度为 2 * n 的数组,其中 n 是所包含的几何图形中表示的维数,最西南点的坐标轴后跟最东北点的坐标轴。bbox 的坐标轴顺序遵循几何图形的坐标轴顺序。

    bbox值定义沿着固定的经度、纬度和海拔线作为边缘的形状。

    特征对象中的2D bbox 示例:

    {
      "type": "Feature",
      "bbox": [-10.0, -10.0, 10.0, 10.0],
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-10.0, -10.0],
            [10.0, -10.0],
            [10.0, 10.0],
            [-10.0, -10.0]
          ]
        ]
      }
      //...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    特征集合中 2D bbox 成员示例:

    {
      "type": "FeatureCollection",
      "bbox": [100.0, 0.0, 105.0, 1.0],
      "features": [
        //...
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    带有 100m 深度3D bbox成员示例:

    {
      "type": "FeatureCollection",
      "bbox": [100.0, 0.0, -100.0, 105.0, 1.0, 0.0],
      "features": [
        //...
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5.1 连接线

    边界框的四条线完全在坐标参考系中定义。也就是说,组成一个以“西”、“南”、“东”和“北”值为边界的框(四至),最北线上的每一点都可以表示为:

    (lon, lat) = (west + (east - west) * t, north)
      0 <= t <= 1
    
    • 1
    • 2

    5.2 180 度经线

    参照一组位于斐济群岛上的 Point 特征对象,它横跨在南纬 16 度到南纬 20 度之间。 包含这些特征的框的西南角是在南纬 20 度 和东经 177 度,西北角是在南纬 16 度和西经 178 度。 这个跨越180 经度线特征GeoJSON 包围框是:

    "bbox": [177.0, -20.0, -178.0, -16.0]
    
    • 1

    跨越了5 经度

    同一纬度带的互补包围框,不穿过 180 度经线

    "bbox": [-178.0, -20.0, 177.0, -16.0]
    
    • 1

    跨越了 355 经度

    东北角的纬度总是大于西南角的纬度,但是穿过 180 度经线的边框的东北角经度小于西南角的经度。

    5.3 两极

    一个包含北极的包围框从[最小纬度,西经 180 度]的西南角延伸到[北纬 90 度,东经 180 度]的东北角。在地球仪上看,这个包围框近似于一个被纬线包围着的球帽。

    "bbox": [-180.0, minlat, 180.0, 90.0]
    
    • 1

    一个包含南极的包围框从[南纬 90 度,西经 180 度]的西南角延伸到[最大纬度,南纬 180 度]的东北角。

    "bbox": [-180.0, -90.0, 180.0, maxlat]
    
    • 1

    一个刚刚接触到北极的包围框,在地球仪上观察时形成一个近似球形的帽子,从最小纬度和最西经度的西南角延伸到北纬 90 度和最东经度的东北角

    "bbox": [westlon, minlat, eastlon, 90.0]
    
    • 1

    类似地,一个刚刚接触到南极的包围框,在地球仪上观察时,形成一个近似球帽的切片,在 GeoJSON 中有以下表示。

    "bbox": [westlon, -90.0, eastlon, maxlat]
    
    • 1

    实现时不能使用大于 90 或小于-90 的纬度值来表示一个范围。

    6 扩展 GeoJson

    6.1 外部成员

    本规范中未描述的成员(“外部成员”)可以在 GeoJSON 文档中使用。 注意,对外部成员的支持可能因具体实现而异,并且没有为外部成员定义规范的处理模型。 因此,过于依赖外部成员的实现可能会减少与其他实现的互用性。

    例如,在下面显示的(删减的) 特征对象中:

    {
           "type": "Feature",
           "id": "f1",
           "geometry": {...},
           "properties": {...},
           "title": "Example Feature"
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    “ title” : “ Example Feature”名称 : 值对是外部成员。 当外部成员的值为对象时,该对象的所有后代成员本身都是外部成员GeoJson 语义不适用于外部成员及其后代,无论它们的名称和值如何。 例如,在下面的(删减的) 特征对象中:

    {
           "type": "Feature",
           "id": "f2",
           "geometry": {...},
           "properties": {...},
           "centerline": {
               "type": "LineString",
               "coordinates": [
                   [-170, 10],
                   [170, 11]
               ]
           }
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    centerline成员不是 GeoJSON 几何对象

    7 GeoJson 类型不可扩展

    实现时不能扩展 GeoJSON 类型的固定集合: FeatureCollectionFeaturePointLineStringMultiPointPolygonMultiLineStringMultiPolygonGeometryCollection

    7.1 GeoJson 成员和类型的语义不可变

    实现时不能更改 GeoJSON 成员和类型的语义。

    GeoJson 的“coordinates”和“geometries”成员定义几何对象FeatureCollectionFeature 对象不能包含“coordinates”或“geometries”成员。

    GeoJson 的“geometry”和“properties”成员定义一个特征对象特征集合对象几何对象,不能包含一个“geometry”或“properties”成员。

    GeoJsonfeatures”成员定义一个特征集合对象特征对象几何对象不能包含一个“features”成员。

    8 版本标识

    GeoJson 格式可以像这里定义的那样进行扩展,但是没有定义明确的版本控制方案。 改变 GeoJSON 成员的语义或者修改格式的规范不会创建这种格式的新版本; 相反,它定义了一种全新的格式,不能被标识为 GeoJSON

    9 映射到‘geo’URIs

    “ geo” URIs RFC5870)定义的地理位置和精确位置,可以映射到GeoJSON 几何对象

    对于本节,如 RFC5870 中所示,“lat”、“ lon”、“ alt”和“ unc”分别是‘ geo’ URIs纬度经度海拔不确定值的占位符

    一个具有两个坐标和一个不确定性(u)参数“ geo” URIs,可以和一个 GeoJSON Point 几何图形互相映射。 GeoJson Point 总是转换为没有不确定性参数‘ geo’ URIs

    'geo' URI:
    
       geo:lat,lon
    
       GeoJSON:
    
       {"type": "`Point`", "coordinates": [lon, lat]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    'geo’ URIsGeoJSON 之间指定海拔的映射如下所示:

    'geo' URI:
    
       geo:lat,lon,alt
    
       GeoJSON:
    
       {"type": "`Point`", "coordinates": [lon, lat, alt]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    GeoJson 没有不确定性的概念; 因此不确定的 'geo' URIs 无法被映射到 GeoJSON 几何图形

    10 安全考虑

    GeoJsonJSON 内容类型所共有的安全问题。 详情请参阅RFC7159 ,第 12 节。 GeoJson 不提供可执行内容。 GeoJson 不提供隐私或完整性服务。

    如果敏感数据需要隐私或完整性保护,那么传输必须提供这些保护——例如,传输层安全性(TLS)或 HTTPS。 在某些情况下,存储的数据需要保护,这超出了本文档的范围。

    与其他地理数据格式一样,如(KMLv2.2),提供关于敏感人物、动物、栖息地和设施的位置的详细信息可能会使它们受到未经授权的跟踪或伤害。 数据提供者应当认识到,如果匿名数据集中的位置未充分模糊,就有可能无意识地识别出个人。数据提供者也应当认识到位置模糊的有效性受到若干因素的限制,不太可能成为抵御攻击的有效防御。

    11 互用性考虑因素

    11.1 I-JSON

    GeoJson 文本应遵循 Internet JSON (I-JSON)的约束,以实现最大程度的互用性

    11.2 坐标精度

    GeoJson 文本的字节大小是一个主要的互用性考虑因素,坐标值的精度对文本的大小有很大的影响。 通过将坐标精度从小数点后 6 位提高到小数点后 15 位,一个包含许多详细多边形的 GeoJSON 文本几乎可以膨胀两倍。 对于以度数为单位的地理坐标,6位小数(例如 sprintf 中常见的默认位置)大约等于 10 厘米,这个精度远低于目前的 GPS 系统。 实现时应该考虑使用超出必要精度的代价。

    此外,WGS 84基准面是大地水准面的一个相对粗略的近似值,相对于平行于地球平均海平面的表面,高度变化可达5 米(但一般在 2 至 3 米之间)。

    12 IANA 考虑

    GeoJson 文本的媒体类型是“ application / geo + json” ,并在RFC6838中描述的“ Media Types”注册表中注册。 同一注册表中的“ application / vnd.geo + json" 应该将其状态更改为“OBSOLETED” ,并指向媒体类型“ application / geo + json”和添加到此 RFC 的引用。

    • 类型名称: application
    • 子类型名称: geo + json
    • 所需参数: n/a
    • 可选参数: n/a
    • 编码考虑因素: 二进制
    • 安全考虑因素: 参见上文[第 10 节]
    • 互用性考虑因素: 参见上文[第 11 节]
    • 发布的规范: [RFC7946]
    • 使用此媒体类型的应用程序: 目前没有已知的应用程序使用此媒体类型。 这种媒体类型适用于目前使用“ application / vnd.geo + json”或“ application / json”媒体类型的 GeoJSON 应用程序,其中包括几个类别: web 地图地理空间数据库地理数据处理 api数据分析存储服务以及数据传输

    附加信息:

    • 幻数: n / a
    • 文件扩展名:.json .geojson
    • Macintosh 文件类型代码: n / a
    • 对象标识符: n / a
    • Windows 剪贴板名称: GeoJSON
    • Macintosh 统一类型标识符: public.geojson conforms to public.json
    • 联系人详细信息: Sean Gillies (Sean.Gillies@gmail. com)
    • 预期用途: COMMON
    • 使用限制:
    • 作者: 见[RFC7946]“作者地址”一节。
    • 变更管理者: 互联网工程任务组

    附录 A. 几何对象实例

    下面的每个示例都表示一个有效且完整的 GeoJSON 对象

    A.1 Points

    点坐标按xy 顺序排列(向、向投影坐标经度纬度地理坐标) :

    {
      "type": "Point",
      "coordinates": [100.0, 0.0]
    }
    
    • 1
    • 2
    • 3
    • 4

    A.2 LineStrings

    Linestring 的坐标是一个位置数组(见第 3.1.1 节))

    {
      "type": "LineString",
      "coordinates": [
        [100.0, 0.0],
        [101.0, 1.0]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    A.3 Polygons

    一个多边形的坐标是一个 linear ring 数组(见 3.1.6 节])的坐标数组。 数组中的第一个元素表示最外环。 任何后续元素都表示内部环(或孔)

    没有孔的情况:

    {
      "type": "Polygon",
      "coordinates": [
        [
          [100.0, 0.0],
          [101.0, 0.0],
          [101.0, 1.0],
          [100.0, 1.0],
          [100.0, 0.0]
        ]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    内部有的情况:

    {
      "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]
        ]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    A.4 MultiPoints

    MultiPoints 的坐标是一个位置数组:

    {
      "type": "MultiPoint",
      "coordinates": [
        [100.0, 0.0],
        [101.0, 1.0]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    A.5 MultiLineStrings

    Multilinestring 的坐标是一个 ”LineString 坐标数组“组成的数组:

    {
      "type": "MultiLineString",
      "coordinates": [
        [
          [100.0, 0.0],
          [101.0, 1.0]
        ],
        [
          [102.0, 2.0],
          [103.0, 3.0]
        ]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    A.6 MultiPolygons

    MultiPolygons 的坐标是”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]
          ]
        ]
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    A.7 GeometryCollections

    Geometrycollection 的“ Geometry”数组中的每个元素都是上面描述的几何对象之一:

    {
      "type": "GeometryCollection",
      "geometries": [
        {
          "type": "Point",
          "coordinates": [100.0, 0.0]
        },
        {
          "type": "LineString",
          "coordinates": [
            [101.0, 0.0],
            [102.0, 1.0]
          ]
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    附录 B. 对之前 GeoJSON 格式规范的修改

    本附录简要总结了 2008 规范[GJ2008]中的非编辑性变更。

    B.1 规范更改

    • 取消了坐标参考系统的规格,即不再使用[GJ2008]的“ crs”成员。
    • 在没有高程值的情况下,对高度或深度敏感的应用程序应将第三个位置解释为在当地的地面或海平面(见[第 4 节])。
    • 实现时不应扩展位置数组超过 3 个元素(参见[3.1.1 节])。
    • 两个位置之间的直线是笛卡尔坐标直线(见[3.1.1 节])。
    • 多边形环必须遵循右手定位法则(逆时针方向外环,顺时针内环)。
    • bbox”数组的值是“[ west,south,east,north ]” ,而不是“[ minx,miny,maxx,maxy ]”(参见[第 5 节])。
    • Feature 对象的“ id”成员是一个字符串或数字(见[第 3.2 节])。
    • 可以使用扩展,但不能改变 GeoJSON 成员和类型的语义(参见[第 6 节])。
    • GeoJSON 对象不能包含其他类型的定义成员(参见[第 7.1 节])。
    • GeoJSON 的媒体类型是“ application / geo + json”。

    B.2 增加 GeoJSON 文本的定义

    • 添加了映射到 geo’ URIs 的规则。
    • 增加了I-JSON限制的建议。
    • 提醒实施者注意坐标精度过高对互用性的影响。
    • 注意到几何集合的互用性问题。 这些对象应该谨慎使用。

    附录 C. GeoJSON 文本序列

    在这个规范中定义的所有 GeoJSON 对象—— FeatureCollectionFeatureGeometry ——只包含一个 JSON 对象。 然而,在某些情况下,应用程序可能需要表示这些对象的集合或序列(超过在 FeatureCollection 中对 Feature 对象的分组) ,例如,为了有效地“stream”大量的 Feature 对象。 这种集合或序列的定义超出了本规范的范围。

    如果需要这样的表示,则需要能够表示这些集合或序列的新媒体类型。 在定义这样的媒体类型时,基于“ JSON 文本序列(JSON)”可能是有用的,这样规范就不需要考虑如何表示多个JSON 对象,只需定义它如何应用于GeoJSON 对象

  • 相关阅读:
    【华为OD机试真题 python】 【找单词】【2022 Q4 | 200分】
    Spring Cache和redis结合使用
    【MATLAB教程案例39】语音信号的PCM编解码matlab仿真学习
    miRNA测序数据生信分析——第三讲,已知物种的生信分析实例
    探索原味BFF模式
    JUC-原子操作类之18罗汉增强
    一些实用的工具网站
    leetcode 925. 长按键入
    下一个十年,数字化的发展趋势
    抓住晨会驱动【目标管理】
  • 原文地址:https://blog.csdn.net/weixin_44040023/article/details/126784886