GDAL 的内置矢量工具集ogr的详解使用
GDAL 的内置矢量工具集ogr的详解使用
- 1,GDAL简介
- 2,OGR 的主要功能
- 3,常用 OGR 命令行工具
- 3.1. ogrinfo:矢量数据结构与元数据查看工具
- 3.2. ogr2ogr:核心的矢量处理工具
- 3.3. ogrlineref:线性参考系统处理工具
- 3.4. ogrmerge.py:批量矢量数据合并工具
- 4,总结
1,GDAL简介
在 GDAL(Geospatial Data Abstraction Library) 里,实际上分为两个部分:
- GDAL (Geospatial Data Abstraction Library)
核心负责 栅格数据(Raster) 的读写与处理,例如 GeoTIFF、NetCDF、IMG、DEM 等。
提供 gdal_translate、gdalwarp、gdalinfo 等命令行工具。
- OGR (OpenGIS Simple Features Reference Implementation)
最初是独立项目(OGR Simple Features Library),后来合并进 GDAL。
主要负责 矢量数据(Vector) 的读写和操作,例如 Shapefile、GeoJSON、GPKG、PostGIS、KML 等。
2,OGR 的主要功能
GDAL 的矢量处理能力主要来自其子库 OGR,支持的格式包括 Shapefile、GeoJSON、GPKG、PostGIS、CSV 等数十种。GDAL 2.x 之后,栅格和矢量的处理能力统一到一个框架中,命令行工具前缀统一为 ogr 或 gdal 开头。
提供 ogr2ogr、ogrinfo 等命令行工具。
-
数据读写:支持上百种矢量格式(Shapefile、GeoJSON、KML、GPKG、PostGIS…)。
-
数据转换:通过 ogr2ogr 进行格式转换、坐标投影转换。
-
几何操作:缓冲区、相交、并集、差分、裁剪等(部分功能借助 GEOS)。
-
属性操作:字段增删改、筛选(SQL-like 语法)。
-
空间查询:支持 OGRSQL、SQLite SQL(结合 -dialect SQLite)。
3,常用 OGR 命令行工具
-
ogrinfo → 查看矢量文件基本信息
-
ogr2ogr → 矢量数据转换、投影、裁剪、抽取子集
3.1. ogrinfo:矢量数据结构与元数据查看工具
用于查看数据集中的图层、字段、要素数量、几何类型等基本信息,是掌握数据结构的第一步。
常用参数:
参数 | 功能 |
---|---|
-so | 仅显示图层结构信息,不显示要素 |
-al | 显示所有图层和要素信息 |
-where <条件> | 属性过滤 |
-geom=NO | 不输出几何字段 |
-sql “<SQL语句>” | 使用 SQL 语句查看示例:ogrinfo -al -so path.gpkg |
说明:查看 GeoPackage 中所有图层的字段信息与空间参考。
示例:
ogrinfo -al -so path.gpkg
说明:查看 GeoPackage 中所有图层的字段信息与空间参考。
3.2. ogr2ogr:核心的矢量处理工具
ogr2ogr 是 GDAL 中最核心、最灵活的矢量处理工具,支持:
- 矢量数据格式转换(如 SHP 转 GeoJSON)
- 坐标参考系转换
- 属性字段过滤与提取
- 几何处理(裁剪、缓冲、简化、修复)
- 字段操作与子集提取
- 多图层合并与输出控制
常用参数说明:
参数 | 功能 |
---|---|
-f <格式> | 指定输出格式,如 “GeoJSON”、“GPKG” |
-t_srs | 指定目标投影坐标系(如 EPSG:4326) |
-where <条件> | 属性过滤条件(SQL 语法) |
-spat xmin ymin xmax ymax | 空间过滤框 |
-sql “<SQL语句>” | 自定义 SQL 查询处理 |
-dialect <SQL类型> | 指定 SQL 方言,如 sqlite |
-simplify <距离> | 简化几何,单位与数据坐标系一致 |
-makevalid | 对无效几何进行修复 |
-overwrite | 覆盖已有输出图层 |
-append | 向已有图层追加要素 |
示例 1:格式转换
ogr2ogr -f "GeoJSON" output.geojson input.shp
说明:将 input.shp 转换为 GeoJSON 格式,并输出为 output.geojson。
示例 2:属性过滤提取子集
ogr2ogr -where "Population > 100000" bigcities.shp cities.shp
说明:提取属性字段 Population 大于 10 万的要素,生成新的 Shapefile bigcities.shp。
示例 3:投影转换
ogr2ogr -t_srs EPSG:4326 reprojected.shp input.shp
说明:将 input.shp 的投影转换为 WGS84 (EPSG:4326),生成 reprojected.shp。
示例 4:几何简化
ogr2ogr -simplify 100 simplified.shp input.shp
说明:将 input.shp 中的几何按 100 米简化,输出为 simplified.shp,适用于大比例尺地图渲染。
示例 5:SQL 几何缓冲操作
ogr2ogr buffer.shp input.shp -dialect sqlite -sql "SELECT ST_Buffer(geometry, 500) AS geometry FROM input"
说明:对每个要素缓冲 500 米,输出缓冲区结果为 buffer.shp,适用于影响范围分析。
示例 6:几何修复
ogr2ogr -makevalid valid.shp invalid_input.shp
说明:修复无效几何(如自相交)并输出为 valid.shp,可用于空间分析前的预处理。
3.3. ogrlineref:线性参考系统处理工具
用于处理线性参考(Linear Referencing)相关的任务,创建一个线性引用—一个包含特殊长度段(例如,以引用单位为 1km)的文件,并从该文件中获取坐标、线性引用距离或子线(子路径)。
常用参数:
参数 | 功能 |
---|---|
-create | 创建线性参考 |
-p <参考图层> | 到线性参考点的路径(例如道路里程碑) |
-pm <位置字段名称>` | 沿路径距离的字段名称(例如里程碑值) |
示例:
// 从路线线图层、公里桩点图层创建线性参考
ogrlineref -create -l paths.shp -p mstones.shp -pm pos -o parts.shp -s 100
// 输出:线性参考文件parts.shp// 计算指定点公里数
ogrlineref -get_pos -r parts.shp -x -1.4345 -y 51.9497 -quiet
// 输出:15977.724709// 计算指定距离出的点坐标
ogrlineref -get_coord -r parts.shp -m 15977.724709 -quiet
// 输出:-1.435097,51.950080,0.000000// 按起始距截取部分路线
ogrlineref -get_subline -r parts.shp -mb 13300 -me 17400 -o output.shp
// 输出:output.shp
3.4. ogrmerge.py:批量矢量数据合并工具
适用于将多个 Shapefile、GeoJSON 等合并为一个图层或多个图层,需要使用 python 命令调用。
常用参数:
参数 | 功能 |
---|---|
-o <输出路径> | 输出文件 |
-single | 合并为单图层 |
-f <格式> | 输出格式,如 GPKG、ESRI Shapefile |
-nln <图层名> | 指定输出图层名 |
示例:
python ogrmerge.py -o merged.gpkg -single -f GPKG ./province/*.shp
说明:将 ./province/ 文件夹下的所有 Shapefile 合并为一个 GPKG 文件中的单一图层。
4,总结
GDAL 的矢量工具集以其轻量、高效、脚本化的优势,为 GIS 数据处理提供了强有力的支撑。特别是 ogr2ogr,几乎覆盖了从预处理、格式标准化、空间分析、再到数据发布的全流程,是 GIS 开发者与空间分析人员必学的工具。掌握这些工具,并结合批处理或 Python 脚本,可显著提升工作效率,为构建自动化、标准化的数据处理链条奠定基础。
“人的一生会经历很多痛苦,但回头想想,都是传奇”。