GeoJSON

司机简称

GeoJSON

Driver built-in by default

This driver is built-in by default

此驱动程序实现对访问编码在中的功能的读/写支持 GeoJSON 格式。GeoJSON是一种基于 JavaScript Object Notation (JSON) . JSON是一种用于数据交换的轻量级纯文本格式,GeoJSON只不过是它对地理内容的专门化。

GeoJSON支持作为许多服务的输出格式: GeoServerCartoWeb 等。

OGR GeoJSON驱动程序将GeoJSON编码的数据转换为 OGR Simple Features model :数据源、图层、要素、几何图形。实现基于 GeoJSON Specification, v1.0 .

从GDAL 2.1.0开始,GeoJSON驱动程序支持更新现有的GeoJSON文件。在这种情况下,NATIVE_DATA open选项的默认值将为YES。

驱动程序功能

Supports Create()

This driver supports the GDALDriver::Create() operation

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

数据来源

OGR GeoJSON驱动程序接受三种类型的数据源:

  • 统一资源定位器 (URL _)-要执行的网址 HTTP 请求

  • 带有GeoJSON数据的纯文本文件-由文件扩展名.GeoJSON或.json标识

  • 直接传递并用GeoJSON编码的文本

从GDAL 2.3开始,URL/filename/text可能以GeoJSON:作为前缀,以避免与其他驱动程序产生任何歧义。

GeoJSON数据源被转换为具有预定义名称的单个OGRLayer对象 奥格霍森

ogrinfo -ro http://featureserver/data/.geojson OGRGeoJSON

假设GeoJSON数据源的OGRDataSource::GetLayerCount()始终返回1也是有效的。

从GDAL 2.2开始,层名称使用以下逻辑构建:

  1. 如果在FeatureCollection级别找到“name”成员,则使用该成员。

  2. 否则,如果文件名是常规的(即不是带有查询参数的URL),则使用不带扩展名和路径的文件名作为层名称。

  3. 否则使用OGRGeoJSON。

将Web服务作为数据源(即FeatureServer)访问时,每个请求都会产生新的层。这种行为符合HTTP事务的无状态特性,类似于Web浏览器的操作方式:single-request==single-page。

如果GeoJSON数据的顶级成员不是 FeatureCollection ,驱动程序将生成只有一个功能的层。否则,图层将由一组要素组成。

如果NATIVE_DATA open选项设置为YES,则FeatureCollection级别的成员将作为序列化的JSon对象存储在层对象的NATIVE_DATA元数据域的NATIVE_DATA项中(以及NATIVE_DATA元数据域的NATIVE_MEDIA_TYPE中的“application/vnd.geo+JSon”)。

特征

OGR GeoJSON驱动程序将以下类型的每个对象映射到新的 OGRFeature 对象:点、线串、多边形、几何集合、要素。

根据 GeoJSON规范 ,只有 特征 对象必须具有名为的成员 性质 . 每个成员 性质 转换为OGRField类型的OGR对象并添加到相应的OGRFeature对象。

这个 GeoJSON规范 不需要全部 特征 集合中具有相同属性架构的对象。如果 特征 由定义的集合中的对象 FeatureCollection 对象具有不同的属性架构,则OGRFeatureDefn中字段的结果架构生成为 union 全部 特征 性质。

模式检测将识别类型为String、Integer、Real、StringList、IntegerList和RealList、Integer(Boolean)、Date、Time和DateTime的字段。

It is possible to tell the driver to not to process attributes by setting configuration option ATTRIBUTES_SKIP =YES. Default behavior is to preserve all attributes (as an union, see previous paragraph), what is equal to setting ATTRIBUTES_SKIP =NO.

如果NATIVE_DATA open选项设置为YES,则特性JSon对象将作为序列化JSon对象存储在OGRFeature对象的NativeData属性中(以及NativeMediaType属性中的“application/vnd.geo+JSon”)。在写入时,如果要写入的OGRFeature的NativeMediaType属性设置为“application/vnd.geo+json”,而NativeData属性设置为序列化json对象的字符串,则该对象的额外成员(即不是“property”字典,也不是几何坐标的前3维)将用于增强创建的json来自OGRFeature的对象。见 RFC 60:OGR中改进的往返 了解更多详细信息。

几何图形

与混合属性特性的问题类似 GeoJSON规范 草稿不需要全部 特征 集合中的对象必须具有相同类型的几何体。幸运的是,OGR对象模型允许在单层(异构层)中有不同类型的几何体。默认情况下,GeoJSON驱动程序保留几何图形的类型。

然而,有时需要从一组异质特征中生成一个同质层。为此,可以告诉驱动程序使用ogrgometryCollection类型作为公共分母包装所有几何图形。可以通过设置 GEOMETRY_AS_COLLECTION 配置选项为YES(默认为NO)。

配置选项

The following configuration options are available:

  • GEOMETRY_AS_COLLECTION: used to control translation of geometries: YES: wrap geometries with OGRGeometryCollection type

  • ATTRIBUTES_SKIP -控制属性的转换:是-跳过所有属性

  • OGR_GEOJSON_MAX_OBJ_SIZE (GDAL >= 3.0.2): size in MBytes of the maximum accepted single feature, default value is 200MB

打开选项

  • FLATTEN_NESTED_ATTRIBUTES =是/否:是否递归地探索嵌套对象并生成扁平OGR属性。默认为否。

  • NESTED_ATTRIBUTE_SEPARATOR =字符:嵌套属性组件之间的分隔符。默认为“

  • FEATURE_SERVER_PAGING =是/否:是否使用ArcGIS功能服务终结点自动滚动结果。

  • NATIVE_DATA =是/否:(GDAL>=2.1)是否在FeatureCollection和Feature级别存储本机JSon表示。默认为否。此选项可用于通过保留一些额外的JSon对象来改进从GeoJSON到GeoJSON的往返,否则OGR抽象将忽略这些额外的JSon对象。请注意,ogr2ogr在默认情况下启用此选项,除非指定其-noNativeData开关。

  • ARRAY_AS_STRING =YES/NO:(GDAL>=2.1)是否将字符串、整数或实数的JSon数组作为OGR字符串公开。默认为“否”。也可以使用 OGR_GEOJSON_ARRAY_AS_STRING 配置选项。

  • DATE_AS_STRING =YES/NO:(GDAL>=3.0.3)是使用专用的OGR日期/时间/日期时间类型还是作为OGR字符串公开日期/时间/日期时间内容。默认值为NO(即检测到日期/时间/日期-时间)。也可以用 OGR_GEOJSON_DATE_AS_STRING 配置选项。

要解释扁平嵌套的属性,请考虑以下GeoJSON片段:

{
  "type": "FeatureCollection",
  "features":
  [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [ 2, 49 ]
      },
      "properties": {
        "a_property": "foo",
        "some_object": {
          "a_property": 1,
          "another_property": 2
        }
      }
    }
  ]
}

“ogrinfo test.json-al-oo FLATTEN_NESTED_ATTRIBUTES=yes”报告:

OGRFeature(OGRGeoJSON):0
  a_property (String) = foo
  some_object_a_property (Integer) = 1
  some_object_another_property (Integer) = 2
  POINT (2 49)

图层创建选项

  • WRITE_BBOX =YES/NO:设置为YES以在特征和特征集合级别写入具有几何体边界框的bbox属性。默认为“否”。

  • COORDINATE_PRECISION =整数:小数点分隔符后在坐标中写入的最大位数。GeoJSON 2008默认为15,RFC 7946默认为7。”智能“截短将发生删除尾随零。

  • SIGNIFICANT_FIGURES =int_number:(OGR>=2.1)写入浮点数时的最大有效位数。默认为17。如果明确指定,而坐标精度不是,则这也适用于坐标。

  • NATIVE_DATA =字符串。(OGR>=2.1)序列化的JSon对象,其中包含要在FeatureCollection级别存储的额外属性。

  • NATIVE_MEDIA_TYPE =字符串。(OGR>=2.1)本地数据格式。必须是“application/vnd.geo+json”,否则将忽略本机_数据。

  • RFC7946号 =是/否(OGR>=2.2)是否使用 RFC 7946 标准。否则 GeoJSON 2008 将使用初始版本。默认值是NO(因此GeoJSON 2008)

  • WRITE_NAME =是/否(OGR>=2.2)是否在要素集合级别使用图层名编写“名称”特性。默认为“是”。

  • DESCRIPTION =字符串。(OGR>=2.2)(长)描述,在功能集合级别写入“描述”属性。读取时,这将在层的描述元数据项中报告。

  • ID_FIELD =字符串。(OGR>=2.3)必须作为要素对象的“id”成员写入的源字段的名称。

  • ID_TYPE =自动/字符串/整数。(OGR>=2.3)要素对象的“id”成员的类型。

  • ID_GENERATE =是/否(OGR>=3.1)自动生成特征ID

  • WRITE_NON_FINITE_VALUES =是/否(OGR>=2.4)是否写入NaN/无穷大值。这种值在严格的JSon模式下是不允许的,但是一些JSon解析器(例如libjson-c>=0.12)可以理解它们,因为ECMAScript允许它们。默认为否

VSI虚拟文件系统API支持

驱动程序支持读取和写入由VSI虚拟文件系统API管理的文件,该API包括“常规”文件以及/vsizip/(读写)、/vsigzip/(读写)、/vsicurl/(只读)域中的文件。

还支持写入/dev/stdout或/vsistdout/。

额外JSon成员的往返

RFC 60:OGR中改进的往返 了解更多详细信息。

从GDAL 2.1开始,在OGR抽象中通常不反映的FeatureCollection、Feature或geometry级别的额外JSon成员(例如下面代码片段中称为“extra_uxxxxx_umember”)在源和目标使用GeoJSON执行ogr2ogr时默认保留。如果变换保留几何结构(例如,允许重新投影,但不更改坐标数),则这也适用于超出第3维(以下示例中为100、101)的几何位置元组中的额外值。

{
  "type": "FeatureCollection",
  "extra_fc_member": "foo",
  "features":
  [
    {
      "type": "Feature",
      "extra_feat_member": "bar",
      "geometry": {
        "type": "Point",
        "extra_geom_member": "baz",
        "coordinates": [ 2, 49, 3, 100, 101 ]
      },
      "properties": {
        "a_property": "foo",
      }
    }
  ]
}

可以通过指定 -noNativeData ogr2ogr实用程序的开关。

RFC 7946写支持

默认情况下,驱动程序将按照GeoJSON 2008规范编写GeoJSON文件。当指定RFC7946=YES创建选项时,将使用RFC7946标准。

两个版本之间的差异在 Appendix B of RFC 7946 并在这里调用起对驱动来说重要的事情:

  • 坐标必须是WGS 84椭球体上的地理坐标,因此如果在图层创建时指定的空间参考系不可用EPSG:4326,动态重投影将由驱动完成。

  • 多边形将按照右手方向的规则书写(逆时针外环,顺时针内环)。

  • The values of a "bbox" array are "[west, south, east, north]", not "[minx, miny, maxx, maxy]"

  • FeatureCollection、Feature和Geometry对象中禁止使用某些扩展成员名称(请参见上一节关于往返的内容)。

  • 默认坐标精度为小数分隔符后的7位小数。

实例

如何转储.geojson文件的内容:

ogrinfo -ro point.geojson

如何使用按属性筛选从远程服务查询功能:

ogrinfo -ro http://featureserver/cities/.geojson OGRGeoJSON -where "name=Warsaw"

如何将从FeatureServer查询到的功能数转换为ESRI形状文件:

ogr2ogr -f "ESRI Shapefile" cities.shp http://featureserver/cities/.geojson OGRGeoJSON

如何将ESRI Shapefile转换为RFC 7946 GeoJSON文件:

ogr2ogr -f GeoJSON cities.json cities.shp -lco RFC7946=YES

也见