ogr2ogr 是一个地理要素数据格式转换工具。
示例
追加数据至一个已存在的图层:
ogr2ogr -update -append -f PostgreSQL PG:dbname=warmerda abc.tab
将数据由 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
选项:源图层的第一个字段用来填充目标图层的第三个字段(index2:第三),源图层的第二个字段忽略,第三个字段用来填充目标图层的第五个字段:
ogr2ogr -append -fieldmap 2,-1,4 dst.shp src.shp
使用
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] [-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 ...]] 高级选项 : [-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]] [-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]
概述
本程序用于地理要素数据集的文件格式转换。在处理过程中还可以进行多种转换操作,如:根据空间和属性选择要素,过滤属性,设置输出的坐标系(坐标系转换),以及重投影(投影转换)。
选项
此处仅列出常用选项
- -f format_name :
输出文件的格式,如:
-f "ESRI Shapefile" -f "TIGER" -f "MapInfo File" -f "GML" -f "PostgreSQL"
若没有指定格式,则基于扩展名推测输出格式。
自 GDAL 2.3 引入。支持格式列表位于GDAL首页,矢量格式见 https://www.gdal.org/ogr_formats.html
- -append :追加数据至现有图层(而不是创建新的图层)。
- -overwrite :删除输出图层,重新创建一个空的图层(重写)。
- -update :以 update 模式打开输出数据源(而不是创建一个新的文件)。
- -select 字段列表 :
从输入图层拷贝到新图层的字段列表,以逗号分隔。当输入图层含有重复字段名时,仅第一个字段会保留,后面重复的字段将被跳过。默认为 all
。注意:不能和 -append
一起使用,如要在追加模式下的筛选字段,请使用 -fieldmap
或 -sql
。
- -progress :在终端显示进度。Only works if input layers have the "fast feature count" capability.
- -sql sql语句 :需要执行的 SQL 语句。执行的结果(表、图层)将被保存到输出中。
- -where restricted_where :属性查询 (类似 SQL WHERE)。
- -skipfailures :发生错误时基继续,跳过失败要素。
- -lco :图层创建选项(参考驱动详情)。
高级选项
- -oo NAME=VALUE:
输入文件打开选项(各选项详见各格式驱动的页面)。 - -doo NAME=VALUE:
输出目标(Destination)数据集打开选项(见驱动详情),仅在使用-update
模式时有效。 - -gt n:
每次事务处理的要素数量。当输出至 DBMS 时可改善性能。 - -forceNullable:
当源数据的字段不能为NULL时,不再继承此属性,使输出图层可以为 NULL。
常用格式驱动
此处介绍驱动的常用选项,请持续更新。
GeoJSON
数据源
- HTTP URL
- .geojson 或 .json 格式的文本文件
- GeoJSON 格式的输入流
图层创建选项(lco)
COORDINATE_PRECISION=number :坐标的精度,int数字。默认为15位(GeoJSON2008),一般我们使用7位即可(RFC 7946)。去掉尾部的0时可能不会严格遵守该精度("Smart" truncation)。
RFC7946=YES/NO:(OGR >= 2.2)是否使用 RFC 7946 标准,默认为NO,即GeoJSON2008。最好设为YES,RFC 7946 为最新 JSON 标准,且 Mapbox 使用的 RFC 8142 标准也由 RFC 7946 修改,不同之处涉及到坐标精度、要素类型、分隔符等。
示例
将 ESRI Shapefile 转换为 RFC 7946 GeoJSON 文件:
ogr2ogr -f GeoJSON cities.json cities.shp -lco RFC7946=YES
PostgreSQL / PostGIS
主要用于从 Postgre 数据库读数据。在该驱动中,SQL语句直接传给 数据库执行,而不是由OGR执行。
连接数据库
PG:dbname=databasename
或
PG:"dbname='databasename' host='addr' port='5432' user='x' password='y'"
ESRI File GDB
使用内置的 OpenFileGDB 驱动
支持 .gdb 目录的读取
示例
从 GDB 中读取数据并存入 PostGIS:
ogr2ogr -overwrite -f "PostgreSQL" PG:"host=myhost user=myuser dbname=mydb password=mypass" "C:\somefolder\BigFileGDB.gdb" "MyFeatureClass"