GDAL_shell
How to use GDAL/OGR library on Linux shell. シェルでGDAL/OGRライブラリ(コマンド)を使うためのメモ。
これ↓, 気をつけよう!
- gdalwarpの四隅指定: xmin ymin xmax ymax
- gdal_translateの四隅指定: ulx uly lrx lry つまりxmin ymax xmax ymin
地図投影法の変換など: gdalwarp
# UTM54からlatlonへの変換例 gdalwarp -s_srs EPSG:32654 -t_srs EPSG:4612 ALAV2A116402870-OORIRFU.RCRefG.tif out.tif EPSGコードを調べたいときは, $ less /usr/share/proj/epsg
リサンプリング:
- gdal_translateとgdalwarpのどちらでもできるが, gdalwarpの方が良い。
- gdalwarpの方が, 4隅をきっちり正確に決めてくれる(gdal_translateは少しずれる)
- gdalwarpはNNやCCなどの手法も指定できる。 gdalwarp -r ...
- 最頻値 (majority, mode)の抜き出しもできる。 -r mode
Try it and check the result about whether correct or not.
- ただし, いくつかの特定バンドだけ抜き出すのはgdal_translateしかできない。そういうときは2段階でやるのがよい:
gdalwarp -te 140.0842835 36.0799195 140.1285914 36.1377125 -ts 1376 1795 -r average inp.tif dummy.tif gdal_translate -b 1 -b 2 -b 3 -b 5 -b 6 -b 7 dummy.tif out.tif
なんでtranslateはダメなのか...? (読者Hさんからの情報 2022/08/23)
gdal_translate -projwin x1 y2 x2 y1 input output
↑こちらは、元衛星データから指定座標の近傍ピクセルから抜くだけで、指定の緯度経度の範囲にはならない。in/outでピクセルの配置が一緒だとOKです。
gdal_translate -projwin x1 y2 x2 y1 -r average input output
↑一方で、リサンプリング手法を指定してみると、指定の緯度経度の範囲で再配置されます。しかし、無理やり位置をずらす感じの処理になっており、普通に位置ずれします。ちなみに、リサンプリング手法の指定はできないことになっていて、ここにバグが隠れてそうです。厳密に言うと指定はできますが、何指定しても同じ結果でした。
gdalwarp -te x1 y1 x2 y2 input output
↑とらりもんにある通り、指定の座標で再配置してくれます。リサンプリング手法も任意に選択可能です。
ちなみにGDAL 2.2.3です。最新だと直ってるのかもしれませんが・・。
サムネイルの作成
gdal_translate -of JPEG -b 3 -b 2 -b 1 AVNIR2.tif AVNIR2_thumbnail.jpg -outsize 6.25% 6.25%
モザイク(この例はGTOPO30を全球モザイク):
gdal_merge.py [EW]??????.DEM -o GTOPO_world.tif -ul_lr -180 90 180 -90 -n -9999 -a_nodata -9999
- 注: gdal_mergeは, 同じファイル名のファイルがあると上書きしてくれないことがある。まず既存のファイルの削除を!!
- ファイルのない場所(海とか)を埋める値の指定: -init 255
- 複数の画像が重複している場合...
- コマンドの中で後に指定されたファイルの画素が優先的にサンプリングされる。
- -n で指定された値(Null)は無視される(これを使えば後方のファイルのNullによる前方のファイルの値の上書きを防げる)。
複数のGeoTIFF画像をモザイクして一枚の画像にする:
$ gdalwarp "入力ファイル1" "入力ファイル2" ・・・ "出力ファイル名" ワイルドカードも使える: $ gdalwarp *.tif "出力ファイル名"
フォーマット変換
gdal_translate -of ENVI input.tif output (GeoTIFFファイルをRawファイルにする) ↑ENVIは.hdrというヘッダファイルが付随するが, 本体はRaw。 gdal_translate -of GTiff input output.tif (何かのフォーマットをGeoTIFFファイルにする) ↑入力ファイルのフォーマットはgdalが勝手に推測してくれるので指定せず。
座標情報の付加・書き換え
gdal_translate -a_srs EPSG:4326 -a_ullr 105.3 15.38 105.4 15.28 in.tif out.tif ... -a srs EPSG:4326 「緯度経度座標系(latlon; EPSGコード4326)に設定せよ」 ... -a ullr x1 y1 x2 y2 「四隅の座標をこのように設定せよ」
get slope from DEM
gdaldem slope -s 111120 filename_of_DEM.tif filename_of_slope.tif The value of -s is the ratio dx/dz. In case of latlon, it must be 111120.
Keyword(s):
References:[GDAL]