L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

gdal

gdal

Use when processing geospatial raster/vector data via command line — format conversion (Shapefile to GeoJSON), reprojection, DEM analysis, NDVI calculation, mosaicking. GDAL/OGR CLI: the industry standard for batch geospatial data processing with 50+ command-line tools (ogr2ogr, gdalwarp, gdal_translate, gdal_calc).

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: gdal description: "Use when processing geospatial raster/vector data via command line — format conversion (Shapefile to GeoJSON), reprojection, DEM analysis, NDVI calculation, mosaicking. GDAL/OGR CLI: the industry standard for batch geospatial data processing with 50+ command-line tools (ogr2ogr, gdalwarp, gdal_translate, gdal_calc)."

tags:

  • gdal
  • ogr
  • cli
  • raster
  • vector
  • conversion
  • reprojection
  • gis
  • geospatial

项目地址: https://github.com/OSGeo/gdal

官方文档: https://gdal.org/en/latest/

源码命令文档: https://gdal.org/en/latest/programs/

许可证: MIT

概述

GDAL 是地理空间数据处理的事实标准库。它提供了 50+ 个命令行工具,分为两大类:

  • OGR 工具(开放地理数据模型):处理矢量数据(点、线、面)
  • GDAL 工具:处理栅格数据(卫星影像、DEM、栅格地图)

环境准备

前置条件

GDAL 3.0+ 已预装在大多数 Linux 发行版的地理信息处理环境中。确保工具在 PATH 中:

gdalinfo --version   # 验证 GDAL 版本
ogrinfo --version    # 验证 OGR 版本

安装方法

Linux (Debian/Ubuntu)

apt-get update
apt-get install gdal-bin python3-gdal

Linux (CentOS/RHEL)

yum install gdal gdal-devel

macOS (Homebrew)

brew install gdal

Conda

conda install -c conda-forge gdal

Docker

docker run -it osgeo/gdal:latest bash

Python 绑定(可选)

某些 GDAL 工具(如 gdal_calc, gdal_merge, gdal_grid, gdal_polygonize)是 Python 脚本,需要安装 Python 绑定:

pip install GDAL
# 或
conda install -c conda-forge gdal

核心命令结构

新式 CLI (GDAL 3.9+)

GDAL 3.9 引入了统一的 CLI 接口(最新稳定版 3.13.3,2026-08,见 下载页),并在后续版本持续完善,新增 gdal vector concave-hull/convex-hull/dissolve/sort、gdal dataset check 等子命令:

gdal <command> <subcommand> [options] <inputs>

主要命令:

  • gdal info — 获取数据信息(自动检测栅格或矢量)
  • gdal vector — 矢量操作入口
  • gdal raster — 栅格操作入口
  • gdal dataset — 数据集管理

传统 CLI(广泛使用)

ogrinfo <datasource> [layer]
ogr2ogr <output> <input> [options]
gdalinfo <raster_file>
gdal_translate <input> <output> [options]
gdalwarp <input> <output> [options]

矢量数据工具(OGR)

完整参数表和高级示例见 reference/vector-tools.md

ogrinfo — 矢量数据信息查询

# 列出所有图层
ogrinfo mydata.shp

# 获取特定图层摘要
ogrinfo mydata.shp layername -so

# JSON 格式输出(GDAL 3.7+)
ogrinfo -json mydata.shp

# 显示所有要素及其属性
ogrinfo -al -geom=YES mydata.shp

# 按属性过滤
ogrinfo mydata.shp -where "AREA > 1000"

ogr2ogr — 矢量数据格式转换和处理

# 格式转换(Shapefile → GeoJSON)
ogr2ogr output.geojson input.shp

# 指定输出格式(Shapefile → GeoPackage)
ogr2ogr -f GPKG output.gpkg input.shp

# 重投影(WGS84 → Web Mercator)
ogr2ogr -t_srs EPSG:3857 output.shp input.shp

# 属性过滤
ogr2ogr output.shp input.shp -where "area > 1000"

# 选择特定字段
ogr2ogr output.shp input.shp -select "id,name,geometry"

栅格数据工具(GDAL)

完整参数表和高级用法见 reference/raster-tools.md

gdalinfo — 栅格数据信息查询

# 基本信息
gdalinfo dem.tif

# JSON 输出
gdalinfo -json dem.tif

# 显示统计信息
gdalinfo -stats dem.tif

gdal_translate — 栅格格式转换和重采样

# 格式转换(GeoTIFF → PNG)
gdal_translate input.tif output.png

# 格式转换(带压缩)
gdal_translate -co COMPRESS=DEFLATE input.tif output.tif

# 重采样(降低分辨率)
gdal_translate -outsize 50% 50% input.tif output.tif

# 裁剪到范围
gdal_translate -projwin -180 90 -170 80 input.tif output.tif

gdalwarp — 栅格重投影和镶嵌

# 重投影(UTM 50N → WGS84)
gdalwarp -t_srs EPSG:4326 input_utm.tif output_wgs84.tif

# 镶嵌多个文件
gdalwarp input1.tif input2.tif input3.tif output_mosaic.tif

# 重采样并重投影
gdalwarp -tr 30 30 -t_srs EPSG:4326 input.tif output.tif

# 用矢量边界裁剪
gdalwarp -cutline clip_boundary.shp -crop_to_cutline input.tif output.tif

gdal_merge.py — 栅格镶嵌融合

# 基本合并
gdal_merge.py -o output.tif input1.tif input2.tif input3.tif

# 分离波段(创建多波段文件)
gdal_merge.py -separate -o rgb.tif r.tif g.tif b.tif

gdal_calc.py — 栅格计算器

# 两个栅格平均
gdal_calc.py -A input1.tif -B input2.tif --calc="(A+B)/2" --outfile=mean.tif

# 计算 NDVI(植被指数)
gdal_calc.py -A nir.tif -B red.tif \
  --calc="(A-B)/(A+B)" --outfile=ndvi.tif

gdal_contour — 等值线提取

# 提取等高线(10 米间隔)
gdal_contour -a elevation dem.tif contours.shp -i 10

# 输出为 GeoJSON
gdal_contour -f GeoJSON dem.tif contours.geojson -i 50

gdal_grid — 从散点数据创建网格

# 基本网格化(使用平均值)
gdal_grid -a average input_points.shp output_dem.tif

# 反距离加权(IDW)插值
gdal_grid -a invdist:power=2:smoothing=0 input_points.shp output_dem.tif

gdal_polygonize.py — 栅格转矢量

# 基本转换
gdal_polygonize.py input.tif output.shp

# 指定输出格式
gdal_polygonize.py input.tif -f GeoJSON output.geojson

gdaltindex — 创建栅格瓦片索引

# 基本索引
gdaltindex index.shp *.tif

# 输出为 GeoPackage
gdaltindex -of GPKG index.gpkg *.tif

gdal_edit.py — 编辑栅格元数据

# 设置坐标参考系
gdal_edit.py -a_srs EPSG:4326 input.tif

# 设置 NoData 值
gdal_edit.py -a_nodata 0 input.tif

nearblack — 清理黑白边界

# 清理黑色边界(默认)
nearblack input.tif -o output.tif

# 搜索白色边界
nearblack -white input.tif -o output.tif

常用环境变量和配置

GDAL 环境变量

变量说明示例
GDAL_DATAGDAL 数据文件目录/usr/share/gdal/
PROJ_LIBPROJ 数据文件目录/usr/share/proj/
CPL_DEBUG调试日志级别ON / OFF
GDAL_CACHEMAX块缓存大小(MB)512
GDAL_NUM_THREADS线程数4 / ALL_CPUS
GDAL_DISABLE_READDIR_ON_OPEN禁用目录读取YES
GDAL_HTTP_TIMEOUTHTTP 超时(秒)30
GDAL_HTTP_MAX_RETRYHTTP 重试次数3
CPL_VSIL_CURL_ALLOWED_EXTENSIONS允许的远程文件扩展名.tif,.tiff,.vrt
AWS_ACCESS_KEY_IDAWS 密钥 ID用于 S3 访问
AWS_SECRET_ACCESS_KEYAWS 密钥用于 S3 访问
GOOGLE_APPLICATION_CREDENTIALSGoogle Cloud 凭证文件/path/to/credentials.json

使用环境变量

# 启用多线程处理
export GDAL_NUM_THREADS=ALL_CPUS

# 增加块缓存
export GDAL_CACHEMAX=1024

# 启用调试
export CPL_DEBUG=ON

# 访问 S3 上的栅格
export AWS_ACCESS_KEY_ID=xxxxx
export AWS_SECRET_ACCESS_KEY=xxxxx
gdalinfo /vsis3/bucket/key.tif

# 运行命令
gdalwarp input.tif output.tif

数据格式支持

矢量格式

格式扩展名说明
Shapefile.shpESRI 标准格式
GeoJSON.geojsonWeb 标准 JSON
GeoPackage.gpkgSQLite 基础,推荐
KML.kmlGoogle Maps 格式
PostGISN/A数据库矢量存储
GML.gmlISO 标准 XML
CSV.csv点数据
DXF.dxfCAD 格式
MapInfo.tabMapInfo 格式

栅格格式

格式扩展名说明
GeoTIFF.tif, .tiff标准地理栅格(推荐)
PNG.pngWeb 图像
JPEG.jpg, .jpeg有损压缩
COG.tif云优化 GeoTIFF
NetCDF.nc科学数据
HDF5.h5, .he5多维数据
ASCII Grid.asc简单栅格(DEM)
JPEG2000.jp2高质量压缩
ECW.ecwERDAS ECW 格式

常见使用模式

模式 1: 批量格式转换

#!/bin/bash
# 将目录内所有 Shapefile 转换为 GeoJSON

for shp in *.shp; do
  base="${shp%.shp}"
  ogr2ogr -f GeoJSON "$base.geojson" "$shp"
done

模式 2: 批量重投影

#!/bin/bash
# 重投影所有 GeoTIFF 为 Web Mercator (EPSG:3857)

for tif in *.tif; do
  base="${tif%.tif}"
  gdalwarp -t_srs EPSG:3857 "$tif" "${base}_3857.tif"
done

模式 3: 创建 DEM 等值线

#!/bin/bash
# 从 DEM 提取等高线(10 米间隔)

gdal_contour -a elev dem.tif -i 10 contours.shp

# 转换为 GeoJSON
ogr2ogr -f GeoJSON contours.geojson contours.shp

模式 4: 计算 NDVI

#!/bin/bash
# 从多光谱影像计算 NDVI

gdal_calc.py \
  -A nir_band.tif \
  -B red_band.tif \
  --calc="(A-B)/(A+B)" \
  --outfile=ndvi.tif

模式 5: 镶嵌和重投影

#!/bin/bash
# 合并多个影像并重投影到 WGS84

gdalwarp -t_srs EPSG:4326 \
  image1.tif image2.tif image3.tif \
  output_mosaic_wgs84.tif

模式 6: 创建栅格瓦片索引

#!/bin/bash
# 为目录内所有 GeoTIFF 创建索引

gdaltindex -recursive -of GPKG \
  tile_index.gpkg /path/to/rasters/

AI 使用建议

推荐工作流

  1. 探索数据:

    gdalinfo input.tif  # 栅格信息
    ogrinfo input.shp   # 矢量信息
    
  2. 检查支持的格式和驱动:

    gdalinfo --formats
    ogrinfo --formats
    
  3. 分步处理(避免大内存操作):

    # 不要直接镶嵌所有文件
    # 改为逐个处理和合并
    
  4. 使用 JSON 输出(便于解析):

    gdalinfo -json input.tif | jq '.coordinateSystem'
    ogrinfo -json input.shp | jq '.layers[0].featureCount'
    
  5. 优化性能:

    # 启用多线程、内存缓存、COG 格式
    export GDAL_NUM_THREADS=ALL_CPUS
    export GDAL_CACHEMAX=2048
    

关键注意事项

  • 始终备份:GDAL 可以就地修改文件(如 gdal_edit.py)
  • 使用绝对路径:避免工作目录问题
  • 验证坐标系:重投影前确认源和目标坐标系
  • 测试小数据:在大数据集上运行前,用小样本测试
  • 使用 VRT(虚拟数据集):避免创建多个副本
  • 环境变量:设置适当的 GDAL_CACHEMAX 和 GDAL_NUM_THREADS

相关技能

参考资源

Skills enregistrées