gdal-ogr2ogr空间数据转换

ogr2ogr 是一个地理要素数据格式转换工具。

示例

追加数据至一个已存在的图层:

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

将数据由 ETRS_1989_LAEA_52N_10E 转为 EPSG:4326 投影,并裁剪至指定的范围:

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

使用 -fieldmap 选项:源图层的第一个字段用来填充目标图层的第三个字段(index2:第三),源图层的第二个字段忽略,第三个字段用来填充目标图层的第五个字段:

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

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 :

输出文件的格式,如:

1
2
3
4
5
-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 文件:

1
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:

1
ogr2ogr -overwrite -f "PostgreSQL" PG:"host=myhost user=myuser dbname=mydb password=mypass" "C:\somefolder\BigFileGDB.gdb" "MyFeatureClass"