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