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 脚本,可显著提升工作效率,为构建自动化、标准化的数据处理链条奠定基础。


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


相关推荐
JanelSirry2 小时前
Windows下GDAL Java环境搭建全攻略
笔记·eclipse·intellij-idea·gdal
轩辰q2 小时前
python异步编程
开发语言·python
databook3 小时前
Manim实现闪电特效
后端·python·动效
Blossom.1183 小时前
AI“点亮”萤火虫:边缘机器学习让微光成像走进4K时代
人工智能·pytorch·python·深度学习·数码相机·opencv·机器学习
Eiceblue4 小时前
Python 将 HTML 转换为纯文本 TXT (HTML 文本提取)
开发语言·vscode·python·html
跟橙姐学代码4 小时前
给Python项目加个“隔离间”,从此告别依赖纠缠!
前端·python·ipython
扑克中的黑桃A5 小时前
Python快速入门专业版(五):从 print 到交互:Python 解释器与 IDLE 的基础使用
python
weixin_457126055 小时前
分享几个免费下载抖音、小红书、快手高清图片和视频的在线网站
javascript·python·html