mcpField
G
gdal

gdal

github.com/isaaccorley数据与数据库7997 次安装12 周前更新
代码仓库

关于 gdal

面向常见栅格与矢量地理空间任务的 GDAL 命令行技能,指导选择工具、检查输入并验证输出。内容涵盖转换、裁剪、镶嵌及概览等工作流。

主要功能

  1. 01栅格与矢量数据检查
  2. 02格式转换与重投影
  3. 03栅格镶嵌与裁剪
  4. 04构建概览与瓦片
  5. 05输出结果验证

适用场景

  1. 01检查未知地理空间数据
  2. 02转换或裁剪矢量数据
  3. 03重投影并处理栅格
  4. 04验证栅格转换结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/isaaccorley/geospatial-skills --skill gdal

安装后在 Claude Code 中输入/gdal确认已加载。

附带文件references/gdal-recipes.md

详细介绍

GDAL 技能

使用 GDAL 命令行工具完成常见的栅格和矢量地理空间工作流。

工具

优先选择最适合任务的最小工具:

  • gdalinfo
  • ogrinfo
  • gdalwarp
  • gdal_translate
  • gdalbuildvrt
  • gdaladdo
  • gdaltindex
  • gdal_rasterize
  • gdal2tiles.py
  • ogr2ogr

如果未安装 GDAL,请先让用户安装,再继续操作。

工作流

1. 先检查
gdalinfo INPUT.tif
ogrinfo INPUT.shp -so -al

对于未知数据,先完整输出一次 gdalinfo 信息很有价值;之后再用 grep 搜索所需的行(Size is|Origin|Pixel Size|Band|Overviews|ID\[)——完整的 WKT 输出很长。对于矢量数据,-so -al 会输出图层摘要;如果只用 -so,却不带 -al 或图层名称,则不会输出有用信息。

2. 选择栅格或矢量处理路径
  • 栅格任务:gdalwarp、gdal_translate、gdalbuildvrt、gdal_rasterize、gdal2tiles.py
  • 矢量任务:ogr2ogr、ogrinfo、gdaltindex
3. 写入新输出
  • 优先使用新输出文件
  • 有意保留 CRS 和 nodata
  • 对大型栅格使用压缩
4. 验证输出

使用与操作相匹配的检查方式——验证时临时发挥往往会导致任务出错:

# Any lossless conversion or mosaic: band checksums must match the input
gdalinfo -checksum INPUT.tif | grep Checksum
gdalinfo -checksum OUTPUT.tif | grep Checksum

# COG: quick layout check, then real validation
gdalinfo OUTPUT.tif | grep -E "LAYOUT|Block=|Overviews"
rio cogeo validate OUTPUT.tif   # via `uv run --with rio-cogeo` if not installed

# Warp/clip: CRS, resolution, per-band min/max in one call
gdalinfo -mm OUTPUT.tif

# Mosaic seamlessness: each quadrant bit-identical to its source tile
# (explicit offsets per tile — avoid shell arrays, the login shell may be zsh)
gdal_translate -q -of VRT -srcwin 0 0 256 256 MOSAIC.tif /tmp/quad.vrt
gdalinfo -checksum /tmp/quad.vrt | grep Checksum   # compare vs TILE_0.tif

# Vector: layer summary + SQLite-dialect counts
ogrinfo OUTPUT.gpkg LAYER -so
ogrinfo OUTPUT.gpkg -dialect SQLite -sql "SELECT COUNT(*) FROM layer"

对可写的 GeoTIFF 使用 gdaladdo 会构建内部概览;使用 -ro 则会强制创建外部 .ovr 伴随文件。因此,输出文件旁边没有 .ovr 文件,就能证明概览存储在内部。

快速参考

# Inspect
gdalinfo INPUT.tif
ogrinfo INPUT.shp -so

# Vector conversion and clipping
ogr2ogr -f GeoJSON -t_srs epsg:4326 OUTPUT.geojson INPUT.shp
gdaltindex -t_srs epsg:4326 -f GeoJSON OUTPUT_EXTENT.geojson INPUT_RASTER.tif
ogr2ogr -f GeoJSON -clipsrc OUTPUT_EXTENT.geojson OUTPUT_CLIPPED.geojson INPUT.shp

# Raster reprojection (choose -r intentionally: bilinear/cubic for continuous, near for categorical)
gdalwarp -t_srs EPSG:XXXX -tr XRES YRES -r bilinear -co TILED=YES -co COMPRESS=DEFLATE -co PREDICTOR=2 INPUT.tif OUTPUT.tif

# Raster clipping
gdal_translate -srcwin XOFF YOFF XSIZE YSIZE INPUT.tif OUTPUT.tif   # by pixel window (exact, no resampling)
gdal_translate -projwin ULX ULY LRX LRY INPUT.tif OUTPUT.tif        # by georeferenced bounds
gdalwarp -cutline INPUT.shp -crop_to_cutline -dstalpha INPUT.tif OUTPUT.tif   # by polygon

# Raster conversion
gdal_translate -b 1 -b 2 -b 3 INPUT.tif OUTPUT.tif
gdal_translate -b 1 -b 2 -b 3 -of JPEG -outsize 400 0 INPUT.tif OUTPUT.jpg

# Mosaic and stack
gdalbuildvrt OUTPUT.vrt path/to/tiffs/*.tif
gdal_translate -co TILED=YES -co BIGTIFF=YES -co NUM_THREADS=ALL_CPUS -co COMPRESS=LZW -co PREDICTOR=2 OUTPUT.vrt OUTPUT.tif

# Internal overviews on an existing GeoTIFF (-r near for categorical; -ro writes external .ovr instead)
gdaladdo -r average OUTPUT.tif 2 4 8

# Rasterize and tile
gdal_rasterize -burn 1.0 -ot Byte -of GTiff -co COMPRESS=LZW -co BIGTIFF=YES INPUT.shp OUTPUT.tif
gdal2tiles.py -z 10-16 INPUT_BYTE.tif OUTPUT/

# COG (format-only conversion — smallest tool that fits)
gdal_translate -of COG -co COMPRESS=LZW -co PREDICTOR=2 -co NUM_THREADS=ALL_CPUS INPUT.tif OUTPUT.tif
# use gdalwarp -of COG only when also reprojecting in the same step

# Vector SQL: OGR's default dialect has no GROUP BY, window, or spatial functions —
# pass -dialect SQLite for anything beyond simple SELECT/WHERE
ogr2ogr -f GPKG OUT.gpkg IN.shp -dialect SQLite \
  -sql "SELECT *, ST_Area(ST_Transform(geometry, EPSG)) AS area_m2 FROM layer WHERE landuse IN ('ag')" \
  -t_srs EPSG:XXXX -nln layername

参考

  • references/gdal-recipes.md(唯一的参考文件)

评论

支持 Markdown