目录
ogr2ogr
概要
描述
性能提示
例子
更多数据转换
GDAL官网
在文件格式之间转换简单要素数据。
ogr2ogr [--help-general] [-skipfailures] [-append] [-update] [-select field_list] [-where restricted_where|\@filename] [-progress] [-sql
|\@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] [-relaxedFieldNameMatch] [-forceNullable] [-unsetDefault] [-fieldTypeToString All|(type1[,type2]*)] [-unsetFieldWidth] [-mapFieldType type1|All=type2[,type3=type4]*] [-fieldmap identity | index1[,index2]*] [-splitlistfields] [-maxsubfields val] [-explodecollections] [-zfield field_name] [-gcp ungeoref_x ungeoref_y georef_x georef_y [elevation]]* [-order n | -tps] [-nomd] [-mo "META-TAG=VALUE"]* [-noNativeData]
ogr2ogr可用于在文件格式之间转换简单要素数据。它还可以在此过程中执行各种操作,例如空间或属性选择,减少属性集,设置输出坐标系甚至在转换过程中重新投影要素。
-f
输出文件格式的名称,例如ESRI Shapefile,MapInfo File,PostgreSQL 。从GDAL 2.3开始,如果未指定,则从扩展名猜测格式(以前是ESRI Shapefile)。
-append
附加到现有图层,而不是创建新图层
-overwrite
删除输出层并重新创建为空
-update
在更新模式下打开现有的输出数据源,而不是尝试创建一个新的数据源
-select
输入层中要复制到新层的字段的逗号分隔列表。即使输入层具有重复的字段名称,如果列表中前面已提及,也将跳过该字段。(默认为all;如果找到具有相同名称的后续字段,则将跳过任何字段。)也可以在列表中指定几何字段。
请注意,此设置不能和-append一起使用。要在添加到图层时控制字段的选择,请使用-fieldmap或-sql。
-progress
在终端上显示进度。仅在输入图层具有“快速要素计数”功能时才有效。
-sql
要执行的SQL语句。结果将保存到输出中。从GDAL 2.1开始,该@filename语法可用于指示内容位于指向的文件名中。
-dialect
SQL语言。在某些情况下,可以通过传递OGRSQL来使用(未优化的)OGR SQL代替RDBMS的本机SQL。“ SQLITE”语言也可以与任何数据源一起使用。
-where restricted_where
属性查询(如SQL WHERE)。从GDAL 2.1开始,该@filename 语法可用于指示内容位于指向的文件名中。
-skipfailures
失败后继续,跳过失败的功能。
-spat
空间查询范围,位于源层(或用指定的层)的SRS中-spat_srs。仅选择几何形状与范围相交的要素。除非-clipsrc指定,否则几何不会被裁剪 。
-spat_srs
覆盖空间滤波器SRS。
-geomfield
空间过滤器所基于的几何字段的名称。
-dsco NAME=VALUE
数据集创建选项(特定于格式)
-lco NAME=VALUE
图层创建选项(特定于格式)
-nln
为新图层分配一个备用名称
-nlt
为创建的图层定义几何类型。包括NONE, GEOMETRY,POINT,LINESTRING,POLYGON, GEOMETRYCOLLECTION,MULTIPOINT,MULTIPOLYGON, MULTILINESTRING,CIRCULARSTRING,COMPOUNDCURVE, CURVEPOLYGON,MULTICURVE,和MULTISURFACE非线性几何类型。在类型名称中添加Z,M或ZM以使用高程,量度或高程和量度指定坐标。PROMOTE_TO_MULTI可用于将mix polygon 或者 multipolygons转为multipolygons,以及将mix linestrings 或者r multilinestrings 转为 multilinestrings。这在shapefile转换PostGIS和其他目标驱动程序时很有用。 CONVERT_TO_LINEAR可用于通过近似它们的非线性几何类型为线性几何类型进行转换,而且CONVERT_TO_CURVE促进非直线型(non-linear)到其广义曲线类型(curve)(如:POLYGON到 CURVEPOLYGON,MULTIPOLYGON到MULTISURFACE,LINESTRING到 COMPOUNDCURVE,MULTILINESTRING到MULTICURVE)。从版本2.1开始,可以将类型定义为已测量(“ 25D”保留为单个“ Z”的别名)。某些强制的几何转换可能会导致无效的几何,例如,当使用-nlt POLYGON强制转换多部分多多边形时,所得的多边形将违反“简单要素”规则。
从GDAL 3.0.5开始,并且 可以同时使用。-nlt CONVERT_TO_LINEAR-nlt PROMOTE_TO_MULTI
-dim
迫使坐标尺寸为val(有效值是XY,XYZ, XYM,和XYZM-用于向后兼容性2是一个别名 XY和3是一个别名XYZ)。这会影响图层几何类型和要素几何。可以将该值设置为layer_dim 表示将要素几何提升为图层声明的坐标尺寸。GDAL 2.1中添加了对M的支持。
-a_srs
分配输出SRS。Srs_def可以是完整的WKT定义(难以避免),也可以是众所周知的定义(即EPSG:4326)或具有WKT定义的文件。
-t_srs
在输出上重新投影或转换为此SRS。
-s_srs
覆盖源SRS。
-ct
PROJ字符串(单步操作或以+ proj = pipeline开头的多步字符串),描述CoordinateOperation的WKT2字符串或 urn:ogc:def:coordinateOperation:EPSG :: XXXX ,URN覆盖从源到目标的默认转换目标CRS。它必须考虑源CRS和目标CRS的轴顺序。3.0版中的新功能。
-preserve_fid
使用源功能的FID,而不是让输出驱动程序自动分配一个新的(对于需要FID的格式)。如果不在附加模式下,则此行为是默认行为,如果输出驱动程序具有FID图层创建选项,则在这种情况下将使用源FID列的名称,并尝试保留源要素ID。可以通过设置禁用此行为-unsetFid。
-fid fid
如果提供,将仅处理具有指定功能部件ID的功能部件。不包括空间查询或属性查询。注意:如果要基于特征ID选择多个特征,则还可以使用'fid'是OGR SQL可以识别的特殊字段这一事实。因此, -哪里“在(1,3,5)中找到”会选择特征1、3和5。
-limit nb_features
限制每层要素的数量。
-oo NAME=VALUE
输入数据集打开选项(特定于格式)。
-doo NAME=VALUE
目标数据集打开选项(特定于格式),仅在-update模式下有效。
-gt n
每笔交易的n组功能(默认为20000)。写入具有事务支持的DBMS驱动程序时,请增加该值以提高性能。n可以设置为无限制,以将数据加载到单个事务中。
-ds_transaction
强制使用数据集级别的事务(对于支持这种机制的驱动程序),尤其是对于FileGDB之类的驱动程序,仅在仿真模式下支持数据集级别的事务。
-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent
如果使用spat_extent关键字,则将数据源中的几何形状剪切到指定的边界框(在源SRS中表示),WKT几何形状(POLYGON或MULTIPOLYGON),或者剪切到-spa ..选项的空间范围。指定数据源时,通常将其与-clipsrclayer,-clipsrcwhere或-clipsrcsql选项结合使用
-clipsrcsql
而是使用SQL查询选择所需的几何。
-clipsrclayer
从源剪辑数据源中选择命名图层。
-clipsrcwhere
根据属性查询限制所需的几何形状。
-clipdst
重新投影到指定的边界框(在dest SRS中表示),WKT几何(POLYGON或MULTIPOLYGON)或从数据源中裁剪几何。指定数据源时,通常需要结合使用-clipdstlayer,-clipdstwhere或-clipdstsq ..选项。
-clipdstsql
而是使用SQL查询选择所需的几何。
-clipdstlayer
从目标剪辑数据源中选择命名图层。
-clipdstwhere
根据属性查询限制所需的几何形状。
-wrapdateline
跨越日期线子午线的分割几何体(长= +/- 180度)
-datelineoffset
与日期线的偏移,以度为单位(默认长。= +/- 10度,将拆分170度至-170度之间的几何形状)
-simplify
距离公差以简化。注意:所使用的算法会保留每个要素的拓扑,尤其是对于多边形几何体,而不是整个图层。
-segmentize
2个节点之间的最大距离。用于创建中间点。
-makevalid
在几何上运行该OGRGeometry::MakeValid()操作,然后运行, OGRGeometryFactory::removeLowerDimensionSubGeoms()以确保它们对于“简单要素”规范的规则有效。
-fieldTypeToString type1,...
将指定类型的任何字段转换为目标图层中string类型的字段。有效类型为: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。类型还可以包括括号之间的子类型,例如Integer(Boolean),Real(Float32),…特殊值All可以用于将所有字段转换为另一种类型。这是使用OGR SQL的CAST运算符的另一种方法,可以避免键入长的SQL查询。这是-fieldTypeToString的概括。请注意,这不会影响源驱动程序使用的字段类型,仅是事后转换。
-unsetFieldWidth
将字段宽度和精度设置为0。
-splitlistfields
根据需要将StringList,RealList或IntegerList类型的字段拆分为String,Real或Integer类型的多个字段。
-maxsubfields
与组合-splitlistfields以限制为每个拆分字段创建的子字段的数量。
-explodecollections
为源文件中任何种类的几何图形集合中的每种几何图形生成一个特征,并在任何-sql选项之后应用。
-zfield
使用指定的字段填充几何的Z坐标。
-gcp
添加指示的地面控制点。可以多次提供此选项以提供一组GCP。
-order
用于翘曲的多项式的阶数(1到3)。默认设置是根据GCP的数量选择多项式顺序。
-tps
根据可用的GCP强制使用薄板花键变压器。
-fieldmap
指定要从源复制到目标的字段索引列表。列表中指定的第(n)个值是目标层定义中该字段的索引,必须在其中复制源层的第n个字段。索引计数从零开始。要省略字段,请指定值-1。列表中的值必须与源层中字段的数量一样多。我们可以使用“身份”设置来指定应使用相同的顺序来传输字段。此设置应与-append设置一起使用。
-addfields
这是的专用版本-append。与相反-append, -addfields具有将现有源层中找到的新字段添加到现有目标层中的作用。合并结构非严格相同的文件时,此选项很有用。这可能不适用于不支持将字段添加到现有非空图层的输出格式。请注意,如果您打算使用-addfields,则可能需要将其与-forceNullable结合使用,包括进行初始导入。
-relaxedFieldNameMatch
如果目标驱动程序有实现,则以更轻松的方式在源和现有目标层之间进行字段名称匹配。
-forceNullable
如果不可空约束存在于源层中,则不要将它们传播到目标层。
-unsetDefault
如果默认字段值存在于源层中,则不要将其传播到目标层。
-unsetFid
可以指定以防止将源FID列的名称和源要素ID重新用于目标图层。例如,如果选择带有ORDER BY子句的源要素,则此选项很有用。
-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配置选项设置为YES,以显着提高插入性能。请参阅PG驱动程序文档页面。
通常,请参考输入和输出驱动程序的文档页面以获取性能提示。
从Shapefile到GeoPackage的基本转换:
ogr2ogr -f GPKG output.gpkg input.shp
将坐标参考系从更改EPSG:4326为EPSG:3857:
#将坐标参考系从更改EPSG:4326为EPSG: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
裁剪带有边界框的输入层(
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
将shapefile转为另一个PostgreSQL数据库中
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 dbname=ldgx user=postgres password=dlwy schemas=shpimport
" /home/serverdata/data/cda3badd-f3cf-45ba-8819-d07c8ffd7375/data/aaa.shp
-lco GEOMETRY_NAME=geom -lco FID=pk_uid --config SHAPE_ENCODING "UTF-8" -nlt PROMOTE_TO_MULTI -nln "newname"
参数详解:
1)-f "PostgreSQL",即目标格式为PostgreSQL,后面的PG即为目标数据库连接参数,支持导入到指定的schema中
2)接下来是导入数据的连接参数,这里导入的是shapefile,则指明shp文件路径即可
3)-lco GEOMETRY_NAME=geom,指明导入之后几何字段的名称为geom
4)-lco FID=pk_uid,指明导入之后ID字段的名称为pk_uid
5)--config SHAPE_ENCODING "UTF-8",加入shapefile编码声明
6)-nlt PROMOTE_TO_MULTI,如果导入数据是Polygon,则强制转换为MultiPolygon。由于创建的目标数据要求几何为MultiPolygon,如果Polygon不转为MultiPolygon,则无法导入
7)-nln "newname",导入数据重新命名为newname
PostgreSQL数据转到另一个PostgreSQL数据库中:
ogr2ogr -f "PostgreSQL" PG:"host=192.168.20.11 port=5432 dbname=ldgx user=postgres password=1234"
PG:"host=localhost port=5432 dbname=ldgx user=postgres password=1234" "ldgx_p_edit"
-progress -lco GEOMETRY_NAME=geom -lco FID=pk_uid -nlt PROMOTE_TO_MULTI
参数详解:
1)跟在源数据库连接后面的"ldgx_p_edit"参数,是指定导入的数据名称,如果不指定,则整库导入
2)-progress,会在命令行中显示转换进度,
将FileGDB数据转为PostgreSQL数据:
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 dbname=projtest user=postgres password=1237 schemas=test
"/Users/paiconor/Downloads/FILEGDBDATA.gdb "project"
-progress -lco GEOMETRY_NAME=geom -lco FID=pk_uid -nlt PROMOTE_TO_MULTI -nln "newname"
从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
(参考:数据转换)
(1)MapInfo ==> ESRI Shape
ogr2ogr -f "ESRI Shapefile" mydata.shp mydata.tab
(2)ESRI Shape ==>MapInfo
ogr2ogr -f "MapInfo File" tabsites.tab sites.shp
(3)MapInfo ==> PostGIS
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=postgres dbname=postgis password=123456"
(4)postgis==>ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" mydata.shp
PG:"host=localhost dbname=postgis user=postgres password=123456" "mytable"
(5)PostGIS ==> KML
ogr2ogr -f "KML" neighborhoods.kml
PG:"host=localhost dbname=postgis user=postgres password=123456"
-sql "select gid,name,the_geom from neighborhoods"
(6)批量转换
将postgis中所有的表都导出到mydatadump文件夹下,导出格式是ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" mydatadump
PG:"host=myhost user=myloginname dbname=mydbname password=mypassword"
部分导出,将指定的表导出到mydatadump中,格式为ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" mydatadump
PG:"host=myhost user=myloginname dbname=mydbname password=mypassword" neighborhood parcels
(7)ESRI GeoDatabase (*.mdb) ==>PostGIS
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432"
C:\GISData\Geonames.mdb -a_srs EPSG:26986
导入指定的featureclass,重投影,重命名geometry列
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb"
/home/postgres/Data/Geonames.mdb GEONAMES_ANNO_HYDRO -a_srs EPSG: 26986 -t_srs EPSG:4269
-nln ma_hydro -lco GEOMETRY_NAME=the_geom_4269
(8)ESRI Shapefile ==>MySQL
ogr2ogr -f "MySQL" MYSQL:"mydb,host=myhost,user=mylogin,password=mypassword,port=3306"
-nln "world" -a_srs “EPSG:4326" path/to/world_adm0.shp
(9)Non-spatial Data ==>PostgreSQL
ogr2ogr -f "PostgreSQL" PG:"host=myserver user=myusername dbname=mydbname password=mypassword"
sometable.dbf -nln "sometable"
下面是如何将shp和tab文件导入到postgis数据库中的命令方式
ogr2ogr -f PostgreSQL PG:"host=localhost dbname=postgis user=postgres password=850315" sites.shp
ogr2ogr -f PostgreSQL PG:"host=localhost dbname=postgis user=postgres password=850315" mytabfile.tab
通过 -nln指定导入数据库中的表名,而不是默认的文件名作为表名
ogr2ogr -f "PostgreSQL" PG:"host=myhost user=myloginname dbname=mydbname password=mypassword"
mytabfile.tab -nln newtablename
通过 -a_srs 选项指定输出的投影
ogr2ogr -f "PostgreSQL" -a_srs "EPSG:2249"
PG:"host=myhost user=myloginname dbname=mydbname password=mypassword" mytabfile.tab
通过-sql 选项后面的SQL语句对postgis中的数据经行筛选后到处到shp文件中
ogr2ogr -f "ESRI Shapefile" mydata.shp PG:"host=myhost user=myloginname dbname=mydbname password=mypassword"
-sql "SELECT name, the_geom FROM neighborhoods"
可以通过ogrinfo命令来查看元数据
ogrinfo sites.shp