GDAL 的内置矢量工具集ogr的详解使用

GDAL 的内置矢量工具集ogr的详解使用

    • 1,GDAL简介
    • [2,OGR 的主要功能](#2,OGR 的主要功能)
    • [3,常用 OGR 命令行工具](#3,常用 OGR 命令行工具)
      • [3.1. ogrinfo:矢量数据结构与元数据查看工具](#3.1. ogrinfo:矢量数据结构与元数据查看工具)
      • [3.2. ogr2ogr:核心的矢量处理工具](#3.2. ogr2ogr:核心的矢量处理工具)
      • [3.3. ogrlineref:线性参考系统处理工具](#3.3. ogrlineref:线性参考系统处理工具)
      • [3.4. ogrmerge.py:批量矢量数据合并工具](#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 中所有图层的字段信息与空间参考。

示例:

python 复制代码
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:格式转换

python 复制代码
ogr2ogr -f "GeoJSON" output.geojson input.shp

说明:将 input.shp 转换为 GeoJSON 格式,并输出为 output.geojson。

示例 2:属性过滤提取子集

python 复制代码
ogr2ogr -where "Population > 100000" bigcities.shp cities.shp

说明:提取属性字段 Population 大于 10 万的要素,生成新的 Shapefile bigcities.shp。

示例 3:投影转换

python 复制代码
ogr2ogr -t_srs EPSG:4326 reprojected.shp input.shp

说明:将 input.shp 的投影转换为 WGS84 (EPSG:4326),生成 reprojected.shp。

示例 4:几何简化

python 复制代码
ogr2ogr -simplify 100 simplified.shp input.shp

说明:将 input.shp 中的几何按 100 米简化,输出为 simplified.shp,适用于大比例尺地图渲染。

示例 5:SQL 几何缓冲操作

python 复制代码
ogr2ogr buffer.shp input.shp -dialect sqlite -sql "SELECT ST_Buffer(geometry, 500) AS geometry FROM input"

说明:对每个要素缓冲 500 米,输出缓冲区结果为 buffer.shp,适用于影响范围分析。

示例 6:几何修复

python 复制代码
ogr2ogr -makevalid valid.shp invalid_input.shp

说明:修复无效几何(如自相交)并输出为 valid.shp,可用于空间分析前的预处理。

3.3. ogrlineref:线性参考系统处理工具

用于处理线性参考(Linear Referencing)相关的任务,创建一个线性引用---一个包含特殊长度段(例如,以引用单位为 1km)的文件,并从该文件中获取坐标、线性引用距离或子线(子路径)。

常用参数:

参数 功能
-create 创建线性参考
-p <参考图层> 到线性参考点的路径(例如道路里程碑)
-pm <位置字段名称>` 沿路径距离的字段名称(例如里程碑值)

示例:

python 复制代码
// 从路线线图层、公里桩点图层创建线性参考
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 复制代码
python ogrmerge.py -o merged.gpkg -single -f GPKG ./province/*.shp

说明:将 ./province/ 文件夹下的所有 Shapefile 合并为一个 GPKG 文件中的单一图层。

4,总结

GDAL 的矢量工具集以其轻量、高效、脚本化的优势,为 GIS 数据处理提供了强有力的支撑。特别是 ogr2ogr,几乎覆盖了从预处理、格式标准化、空间分析、再到数据发布的全流程,是 GIS 开发者与空间分析人员必学的工具。掌握这些工具,并结合批处理或 Python 脚本,可显著提升工作效率,为构建自动化、标准化的数据处理链条奠定基础。


"人的一生会经历很多痛苦,但回头想想,都是传奇"。


相关推荐
开源技术1 小时前
深入了解Turso,这个“用Rust重写的SQLite”
人工智能·python
u0109272712 小时前
RESTful API设计最佳实践(Python版)
jvm·数据库·python
我材不敲代码6 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
0思必得08 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
韩立学长8 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
qq_192779878 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
u0109272719 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊9 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
Imm7779 小时前
中国知名的车膜品牌推荐几家
人工智能·python
tudficdew9 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python