🌊

GDAL 3.11 で追加される gdal コマンドを触ってみる (3) raster calc, vsi, driver

に公開

前回までのあらすじ

https://zenn.dev/mierune/articles/5aebc5ef7a814e

https://zenn.dev/mierune/articles/61d7d4d05ab58d

gdal raster calc

ラスタの各バンドの値を使って計算するための機能です。GDAL のメーリングリストのアナウンス では、これが目玉機能のひとつのようです。

 o Includes a completely new "gdal raster calc" utility.

旧コマンドでは gdal_calc というのが同じ機能のようです(このコマンド知りませんでした)。

https://gdal.org/en/stable/programs/gdal_calc.html

単バンドの GeoTIFF ファイルを3つ使って計算する例を見比べると、だいたい似たようなインターフェースになっているのがわかります。

gdal_calc -A input1.tif -B input2.tif -C input3.tif --outfile=result.tif --calc="A+B+C"
gdal raster calc -i "A=file1.tif" -i "B=file2.tif" -i "C=file3.tif" --calc "A+B+C" -o out.tif

要は、-i でラスタデータを変数として宣言して、--calc の中でその宣言を使うことができます。

出力をマルチバンドにしたい

--calc は複数指定することができ、それぞれの計算結果が別々のバンドとして出力されます。

入力をマルチバンドにしたい

入力がマルチバンドだった場合、計算はバンドごとに行われます。ヘルプページの説明をそのまま持ってくると、file1.tiffile2.tif は3バンド、file3.tif は1バンドだったとき、このコマンドラインの処理は、

gdal raster calc -i "A=file1.tif" -i "B=file2.tif" -i "C=file3.tif" --calc "A+B+C" -o out.tif

以下と同じことです。AB はそれぞれのバンドが使われ、C は3つとも同じバンドが使いまわされます。

gdal raster calc ... \
  --calc "A[1] + B[1] + C[1]" \
  --calc "A[2] + B[2] + C[1]" \
  --calc "A[3] + B[3] + C[1]" \
  -o out.tif

と、さらっと [n] という文法を使いましたが、個別のバンドはこれでアクセスしてくれ、ということのようです。なので、マルチバンドのデータから何らかの指標(NDVI とか)を計算したい、というときは [n] を使うといいみたいです。

gdal vsi

gdal vsi は、GDAL の Virtual File System 越しにデータにアクセスするというものです。具体的には、以下のサブコマンドがあります。sozip だけちょっと毛色が違うかも。

  • list: ファイルの一覧を表示
  • copy: ファイルをコピー
  • delete: ファイルを削除
  • sozip: SOZIP (Seek-Optimized ZIP) を作成する

たとえば、/vsizip/ は ZIP ファイルの中身にアクセスするためのものですが、gdal vsi コマンドを使うと、それを通常のファイルシステムのように扱えます。

root@b89a44ca3009:/# gdal vsi list --format=text /vsizip/downloads/A22-16_01_GML.zip
A22-16_01.dbf
A22-16_01.geojson
A22-16_01.prj
A22-16_01.shp
A22-16_01.shx
A22-16_01.xml
KS-META-A22-16_01.xml

gdal driver

これは、ドライバ固有の操作を行うためのコマンドらしいです。今のところは4つしかありません。

  - gpkg:        Command for GPKG driver specific operations.
  - gti:         Command for GTI driver specific operations.
  - openfilegdb: Command for OpenFileGDB driver specific operations.
  - pdf:         Command for PDF driver specific operations.

GTIGDAL Tile Index というもの、OpenFileGDB は Geodatabase のためのドライバらしいです。

あまり使いどころがよくわかってないんですが、たとえば gpkg はデータの最適化?ができるみたいです。

Usage: gdal driver gpkg <SUBCOMMAND> [OPTIONS]
where <SUBCOMMAND> is one of:
  - repack: Repack/vacuum in-place a GeoPackage dataset

最後に

続きを書きました:

https://zenn.dev/mierune/articles/70fb8f939b86ca

MIERUNEのZennブログ

Discussion