ogr2ogr

在文件格式之间转换简单要素数据。

简介

ogr2ogr [--help-general] [-skipfailures] [-append] [-update]
        [-select field_list] [-where restricted_where|@filename]
        [-progress] [-sql <sql statement>|@filename] [-dialect dialect]
        [-preserve_fid] [-fid FID] [-limit nb_features]
        [-spat xmin ymin xmax ymax] [-spat_srs srs_def] [-geomfield field]
        [-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def] [-ct string]
        [-f format_name] [-overwrite] [[-dsco NAME=VALUE] ...]
        dst_datasource_name src_datasource_name
        [-lco NAME=VALUE] [-nln name]
        [-nlt type|PROMOTE_TO_MULTI|CONVERT_TO_LINEAR|CONVERT_TO_CURVE]
        [-dim XY|XYZ|XYM|XYZM|2|3|layer_dim] [layer [layer ...]]

        # Advanced options
        [-gt n]
        [[-oo NAME=VALUE] ...] [[-doo NAME=VALUE] ...]
        [-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent]
        [-clipsrcsql sql_statement] [-clipsrclayer layer]
        [-clipsrcwhere expression]
        [-clipdst [xmin ymin xmax ymax]|WKT|datasource]
        [-clipdstsql sql_statement] [-clipdstlayer layer]
        [-clipdstwhere expression]
        [-wrapdateline] [-datelineoffset val]
        [[-simplify tolerance] | [-segmentize max_dist]]
        [-makevalid]
        [-addfields] [-unsetFid] [-emptyStrAsNull]
        [-relaxedFieldNameMatch] [-forceNullable] [-unsetDefault]
        [-fieldTypeToString All|(type1[,type2]*)] [-unsetFieldWidth]
        [-mapFieldType type1|All=type2[,type3=type4]*]
        [-fieldmap identity | index1[,index2]*]
        [-splitlistfields] [-maxsubfields val]
        [-resolveDomains]
        [-explodecollections] [-zfield field_name]
        [-gcp ungeoref_x ungeoref_y georef_x georef_y [elevation]]* [-order n | -tps]
        [[-s_coord_epoch epoch] | [-t_coord_epoch epoch] | [-a_coord_epoch epoch]]
        [-nomd] [-mo "META-TAG=VALUE"]* [-noNativeData]

描述

ogr2ogr 可用于在文件格式之间转换简单要素数据。它还可以在转换过程中执行各种操作,如空间或属性选择、减少属性集、设置输出坐标系,甚至在转换过程中重新投影特征。

-f <format_name>

输出文件格式名,例如。 ESRI ShapefileMapInfo FilePostgreSQL . 从GDAL 2.3开始,如果未指定,则从扩展名猜测格式(以前是ESRI Shapefile)。

-append

附加到现有层而不是创建新层

-overwrite

删除输出层并重新创建为空

-update

以更新模式打开现有的输出数据源,而不是尝试创建新的输出数据源

-select <field_list>

要复制到新层的输入层字段的逗号分隔列表。即使输入层有重复的字段名,如果前面在列表中提到,也会跳过字段。(默认为 all ;如果找到具有相同名称的后续字段,则跳过任何字段。)也可以在列表中指定几何字段。

注意:此设置不能与 -append . 要控制附加到层时字段的选择,请使用 -fieldmap-sql .

-progress

在终端上显示进度。仅当输入层具有“快速特征计数”功能时才有效。

-sql <sql_statement>

要执行的SQL语句。生成的表/层将保存到输出。从GDAL 2.1开始 @filename 语法可用于指示内容位于指向的文件名中。

-dialect <dialect>

SQL方言。在某些情况下可以使用(未优化) OGR-SQL方言 而不是通过传递 OGRSQL 方言价值。这个 SQL SQLite方言 方言可以用 SQLITEINDIRECT_SQLITE 方言值,这可以用于任何数据源。

-where restricted_where

属性查询(如SQL WHERE)。从GDAL 2.1开始 @filename 语法可用于指示内容位于指向的文件名中。

-skipfailures

失败后继续,跳过失败的功能。

-spat <xmin> <ymin> <xmax> <ymax>

空间查询范围,在源层的SRS中(或使用 -spat_srs ). 将仅选择几何图形与范围相交的要素。几何图形不会被剪裁,除非 -clipsrc 指定。

-spat_srs <srs_def>

覆盖空间滤波器SRS。

-geomfield <field>

空间过滤器操作的几何体字段的名称。

-dsco NAME=VALUE

数据集创建选项(特定于格式)

-lco NAME=VALUE

图层创建选项(特定于格式)

-nln <name>

为新图层指定备用名称

-nlt <type>

为创建的图层定义几何图形类型。什么之中的一个 NONEGEOMETRYPOINTLINESTRINGPOLYGONGEOMETRYCOLLECTIONMULTIPOINTMULTIPOLYGONMULTILINESTRINGCIRCULARSTRINGCOMPOUNDCURVECURVEPOLYGONMULTICURVEMULTISURFACE 非线性几何类型。添加 ZMZM 到类型名,以指定具有高程、度量值或高程和度量值的坐标。 PROMOTE_TO_MULTI 可用于自动将混合多边形或多多边形的图层升级为多多边形,以及将混合线串或多行线串的图层升级为多行线。在将形状文件转换为PostGIS和其他目标驱动程序时非常有用,这些驱动程序可实现对几何体类型的严格检查。 CONVERT_TO_LINEAR 可用于通过近似将非线性几何类型转换为线性几何类型,以及 CONVERT_TO_CURVE 将非线性类型提升为广义曲线类型 (POLYGONCURVEPOLYGONMULTIPOLYGONMULTISURFACELINESTRINGCOMPOUNDCURVEMULTILINESTRINGMULTICURVE ). 从版本2.1开始,可以将类型定义为measured(“25D”作为单个“Z”的别名)。某些强制的几何转换可能导致无效的几何图形,例如,当强制转换多部分多多边形时 -nlt POLYGON ,生成的多边形将破坏简单特征规则。

从gdal3.0.5开始, -nlt CONVERT_TO_LINEAR-nlt PROMOTE_TO_MULTI 可同时使用。

-dim <val>

将坐标标注强制为val(有效值为 XYXYZXYMXYZM -为了向后兼容 2 是一个别名 XY3 是一个别名 XYZ ). 这会影响图层几何图形类型和要素几何图形。该值可以设置为 layer_dim 指示特征几何图形升级到图层声明的坐标尺寸。GDAL 2.1中增加了对M的支持。

-a_srs <srs_def>

Assign an output SRS, but without reprojecting (use -t_srs to reproject)

The coordinate reference systems that can be passed are anything supported by the OGRSpatialReference.SetFromUserInput() call, which includes EPSG Projected, Geographic or Compound CRS (i.e. EPSG:4296), a well known text (WKT) CRS definition, PROJ.4 declarations, or the name of a .prj file containing a WKT CRS definition.

-a_coord_epoch <epoch>

3.4 新版功能.

Assign a coordinate epoch, linked with the output SRS. Useful when the output SRS is a dynamic CRS. Only taken into account if -a_srs is used.

-t_srs <srs_def>

Reproject/transform to this SRS on output, and assign it as output SRS.

A source SRS must be available for reprojection to occur. The source SRS will be by default the one found in the source layer when it is available, or as overridden by the user with -s_srs

The coordinate reference systems that can be passed are anything supported by the OGRSpatialReference.SetFromUserInput() call, which includes EPSG Projected, Geographic or Compound CRS (i.e. EPSG:4296), a well known text (WKT) CRS definition, PROJ.4 declarations, or the name of a .prj file containing a WKT CRS definition.

-t_coord_epoch <epoch>

3.4 新版功能.

Assign a coordinate epoch, linked with the output SRS. Useful when the output SRS is a dynamic CRS. Only taken into account if -t_srs is used. It is also mutually exclusive with -a_coord_epoch.

Currently -s_coord_epoch and -t_coord_epoch are mutually exclusive, due to lack of support for transformations between two dynamic CRS.

-s_srs <srs_def>

Override source SRS. If not specified the SRS found in the input layer will be used. This option has only an effect if used together with -t_srs to reproject.

The coordinate reference systems that can be passed are anything supported by the OGRSpatialReference.SetFromUserInput() call, which includes EPSG Projected, Geographic or Compound CRS (i.e. EPSG:4296), a well known text (WKT) CRS definition, PROJ.4 declarations, or the name of a .prj file containing a WKT CRS definition.

-s_coord_epoch <epoch>

3.4 新版功能.

Assign a coordinate epoch, linked with the source SRS. Useful when the source SRS is a dynamic CRS. Only taken into account if -s_srs is used.

Currently -s_coord_epoch and -t_coord_epoch are mutually exclusive, due to lack of support for transformations between two dynamic CRS.

-ct <string>

PROJ字符串(以+PROJ=pipeline开头的单步操作或多步字符串)、描述CoordinateOperation的WKT2字符串或urn:ogc:def:CoordinateOperation:EPSG::XXXX urn重写从源到目标CRS的默认转换。它必须考虑源和目标CRS的轴顺序。

3.0 新版功能.

-preserve_fid

使用源特性的FID,而不是让输出驱动程序自动分配一个新特性(对于需要FID的格式)。如果不在附加模式下,如果输出驱动程序具有FID图层创建选项,则此行为是默认行为,在这种情况下,将使用源FID列的名称,并尝试保留源要素ID。可以通过设置 -unsetFid .

-fid fid

如果提供,则仅处理具有指定功能id的功能。不包括空间或属性查询。注意:如果要根据特征id选择多个特征,还可以使用“fid”是OGR SQL识别的特殊字段这一事实。所以, -where "fid in (1,3,5)" 将选择功能1、3和5。

-limit nb_features

限制每层要素的数量。

-oo NAME=VALUE

输入数据集打开选项(特定于格式)。

-doo NAME=VALUE

目标数据集打开选项(特定于格式),仅在更新模式下有效。

-gt n

每个事务的n组功能(默认值为100 000)。当写入具有事务支持的DBMS驱动程序时,增加该值以获得更好的性能。 n 可以设置为unlimited以将数据加载到单个事务中。

-ds_transaction

强制使用数据集级别的事务(对于支持这种机制的驱动程序),特别是对于仅在仿真模式下支持数据集级别事务的驱动程序,如FileGDB。

-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent

从数据源或-spa的空间范围将几何图形剪裁到指定的边界框(以源SRS表示)、WKT几何图形(多边形或多多边形)。。如果使用spat_extent关键字,则为选项。在指定数据源时,通常需要将其与-clipsrclayer、-clipsrcwhere或-clipsrcsql选项结合使用

-clipsrcsql <sql_statement>

改用SQL查询选择所需的几何图形。

-clipsrclayer <layername>

从源剪辑数据源中选择命名层。

-clipsrcwhere <expression>

基于属性查询限制所需的几何图形。

-clipdst <xmin> <ymin> <xmax> <ymax>

将几何图形重新投影到指定的边界框(用dest SRS表示)、WKT几何图形(多边形或多多边形)或从数据源中剪裁几何图形。在指定数据源时,通常需要将其与-clipdstlayer、-clipdstwhere或-clipdstsq组合使用。。选项

-clipdstsql <sql_statement>

改用SQL查询选择所需的几何图形。

-clipdstlayer <layername>

从目标剪辑数据源中选择命名层。

-clipdstwhere <expression>

基于属性查询限制所需的几何图形。

-wrapdateline

穿过日期线子午线的分割几何图形(长。=+/-180度)

-datelineoffset

与日期线的偏移(度)(默认长度。=+/-10度,170度至-170度范围内的几何形状将被拆分)

-simplify <tolerance>

简化的距离公差。注意:使用的算法保留每个特征的拓扑,特别是对于多边形几何体,但不适用于整个层。

-segmentize <max_dist>

两个节点之间的最大距离。用于创建中间点。

-makevalid

运行 OGRGeometry::MakeValid() 操作,然后 OGRGeometryFactory::removeLowerDimensionSubGeoms() ,以确保它们对于简单特征规范的规则是有效的。

-fieldTypeToString type1,...

在目标层中将指定类型的任何字段转换为字符串类型的字段。有效类型为:Integer、Integer64、Real、String、Date、Time、DateTime、Binary、IntegerList、Integer64List、RealList、StringList。特殊值All可用于将所有字段转换为字符串。这是使用OGR SQL的CAST运算符的另一种方法,可以避免键入长SQL查询。请注意,这不会影响源驱动程序使用的字段类型,而且只是事后转换。

-mapFieldType srctype|All=dsttype,...

将指定类型的任何字段转换为其他类型。有效类型为:Integer、Integer64、Real、String、Date、Time、DateTime、Binary、IntegerList、Integer64List、RealList、StringList。类型也可以包括括号之间的子类型,例如整数(布尔值)、实数(浮点32)、。。。特殊值All可用于将所有字段转换为其他类型。这是使用OGR SQL的CAST运算符的另一种方法,可以避免键入长SQL查询。这是-fieldTypeToString的泛化。请注意,这不会影响源驱动程序使用的字段类型,而且只是事后转换。

-unsetFieldWidth

将字段宽度和精度设置为0。

-splitlistfields

根据需要将StringList、RealList或IntegerList类型的字段拆分为String、Real或Integer类型的任意多个字段。

-maxsubfields <val>

结合 -splitlistfields 限制为每个拆分字段创建的子字段数。

-explodecollections

为源文件中任何类型的几何图形集合中的每个几何图形生成一个特征,在任何 -sql 选择权。

-zfield <field_name>

使用指定的字段填充几何图形的Z坐标。

-gcp <ungeoref_x> <ungeoref_y> <georef_x> <georef_y> <elevation>

添加指定的地面控制点。可多次提供此选项以提供一组GCP。

-order <n>

用于翘曲的多项式的阶数(1到3)。默认值是根据gcp的数量选择多项式顺序。

-tps

基于现有GCPs的薄板样条变压器的受力分析。

-fieldmap

指定要从源复制到目标的字段索引列表。列表中指定的第(n)个值是目标层定义中必须复制源层的第n(th)个字段的字段的索引。索引计数从零开始。若要省略字段,请指定值-1。列表中的值必须与源层中字段的计数完全相同。我们可以使用“identity”设置指定字段应使用相同的顺序进行传输。此设置应与 -append 设置。

-addfields

这是 -append . 相反 -append-addfields 具有向现有目标层添加在源层中找到的新字段的效果。当合并具有非严格相同结构的文件时,此选项非常有用。对于不支持向现有非空层添加字段的输出格式,这可能不起作用。请注意,如果计划使用-addfields,则可能需要将其与-forceNullable结合使用,包括用于初始导入。

-relaxedFieldNameMatch

如果目标驱动程序具有源层和现有目标层的实现,则以更轻松的方式在源层和现有目标层之间进行字段名匹配。

-forceNullable

如果源层中存在不可为空的约束,请不要将它们传播到目标层。

-unsetDefault

如果源层中存在默认字段值,则不要将其传播到目标层。

-unsetFid

可以指定,以防止源FID列的名称和源要素ID被重新用于目标图层。例如,如果使用ORDER BY子句选择源要素,则此选项非常有用。

-emptyStrAsNull

3.3 新版功能.

将空字符串值视为null。

-resolveDomains

3.3 新版功能.

When this is specified, any selected field that is linked to a coded field domain will be accompanied by an additional field ({dstfield}_resolved), that will contain the description of the coded value.

-nomd

当输出驱动程序支持时,禁用将元数据从源数据集和层复制到目标数据集和层。

-mo META-TAG=VALUE

当输出驱动程序支持时,传递要在输出数据集上设置的元数据键和值。

-noNativeData

禁用本地数据的复制,即OGR抽象未捕获的源格式的详细信息,这些信息在转换为相同格式时由某些驱动程序(如GeoJSON)保存。

2.1 新版功能.

性能提示

在写入事务性DBMS(SQLite/PostgreSQL、MySQL等)时,增加在BEGIN TRANSACTION和COMMIT TRANSACTION语句之间执行的INSERT语句的数量可能是有益的。这个数字是用-gt选项指定的。例如,对于SQLite,显式定义-gt 65536可以确保最佳性能,同时填充一些包含数十万或数百万行的表。但是,请注意-skipfailures覆盖-gt并将事务大小设置为1。

对于PostgreSQL,PG_USE_COPY config选项可以设置为YES以显著提高插入性能。请参阅PG驱动程序文档页。

更一般地说,有关性能提示,请参阅输入和输出驱动程序的文档页。

计算机辅助编程接口

此实用程序也可以通过 GDALVectorTranslate() .

实例

从Shapefile到GeoPackage的基本转换:

ogr2ogr \
  -f GPKG output.gpkg \
  input.shp

更改坐标参考系 EPSG:4326EPSG:3857

ogr2ogr \
  -s_srs EPSG:4326 \
  -t_srs EPSG:3857 \
  -f GPKG output.gpkg \
  input.gpkg

附加到现有层的示例(两者 -update-append 需要使用标志):

ogr2ogr -update -append -f PostgreSQL PG:dbname=warmerda abc.tab

使用边界框剪裁输入层(<xmin><ymin><xmax><ymax>):

ogr2ogr \
  -spat -13.931 34.886 46.23 74.12 \
  -f GPKG output.gpkg \
  natural_earth_vector.gpkg

按筛选特征 -where 条款:

ogr2ogr \
  -where "\"POP_EST\" < 1000000" \
  -f GPKG output.gpkg \
  natural_earth_vector.gpkg \
  ne_10m_admin_0_countries

从ETRS_1989_LAEA_52N_10E重新投影到EPSG:4326并剪切到边界框的示例:

ogr2ogr -wrapdateline -t_srs EPSG:4326 -clipdst -5 40 15 55 france_4326.shp europe_laea.shp

使用 -fieldmap 设置。源层的第一个字段用于填充目标层的第三个字段(索引2=第三个字段),忽略源层的第二个字段,源层的第三个字段用于填充目标层的第五个字段。

ogr2ogr -append -fieldmap 2,-1,4 dst.shp src.shp

在各个格式页中给出了更多示例。