GDAL 3.11 で追加される gdal コマンドを触ってみる (3) raster calc, vsi, driver
前回までのあらすじ
gdal raster calc
ラスタの各バンドの値を使って計算するための機能です。GDAL のメーリングリストのアナウンス では、これが目玉機能のひとつのようです。
o Includes a completely new "gdal raster calc" utility.
旧コマンドでは gdal_calc
というのが同じ機能のようです(このコマンド知りませんでした)。
単バンドの 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.tif
と file2.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
以下と同じことです。A
と B
はそれぞれのバンドが使われ、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.
GTI
は GDAL Tile Index というもの、OpenFileGDB は Geodatabase のためのドライバらしいです。
あまり使いどころがよくわかってないんですが、たとえば gpkg
はデータの最適化?ができるみたいです。
Usage: gdal driver gpkg <SUBCOMMAND> [OPTIONS]
where <SUBCOMMAND> is one of:
- repack: Repack/vacuum in-place a GeoPackage dataset
最後に
続きを書きました:
Discussion