GeoJSON
司机简称
GeoJSON
Driver built-in by default
This driver is built-in by default
此驱动程序实现对访问编码在中的功能的读/写支持 GeoJSON 格式。GeoJSON是一种基于 JavaScript Object Notation (JSON) . JSON是一种用于数据交换的轻量级纯文本格式,GeoJSON只不过是它对地理内容的专门化。
GeoJSON支持作为许多服务的输出格式: GeoServer , CartoWeb 等。
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驱动程序接受三种类型的数据源:
从GDAL 2.3开始,URL/filename/text可能以GeoJSON:作为前缀,以避免与其他驱动程序产生任何歧义。
层
GeoJSON数据源被转换为具有预定义名称的单个OGRLayer对象 奥格霍森 :
ogrinfo -ro http://featureserver/data/.geojson OGRGeoJSON
假设GeoJSON数据源的OGRDataSource::GetLayerCount()始终返回1也是有效的。
从GDAL 2.2开始,层名称使用以下逻辑构建:
如果在FeatureCollection级别找到“name”成员,则使用该成员。
否则,如果文件名是常规的(即不是带有查询参数的URL),则使用不带扩展名和路径的文件名作为层名称。
否则使用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 typeATTRIBUTES_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
也见
GeoJSON -用JSON编码地理内容
RFC 7946 标准。
GeoJSON 2008 规范(由RFC 7946废弃)。
JSON -JavaScript对象表示法