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 の出力全体を一度確認する価値はあります。その後は必要な行(Size is|Origin|Pixel Size|Band|Overviews|ID\[)を grep してください。WKT の出力全体は長大です。ベクターの場合、-so -al はレイヤーの概要を出力します。レイヤー名を指定せずに -al も付けない -so だけでは、有用な情報は何も出力されません。

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(唯一の参考ファイル)

コメント