とらりもんHOME  Index  Search  Changes  Login

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_translategdalwarpのどちらでもできるが, 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 -projwin 140.07 36.15 140.17 36.05 src.tif cut.tif ← 左上と右下の座標を指定すること。

サムネイルの作成

gdal_translate -of JPEG -b 3 -b 2 -b 1 AVNIR2.tif AVNIR2_thumbnail.jpg -outsize 6.25% 6.25%

バンドごとに別ファイルになってるのを1つのファイルに統合する

gdal_merge.py -separate -o out.tif band1.tif band2.tif band3.tif ...

モザイク(この例は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による前方のファイルの値の上書きを防げる)。

ヘッダ情報の追加、フォーマット変換、画像拡大縮小など 

→ gdal_translate

ヘッダ情報などの基本情報の表示 

→ gdalinfo

複数のGeoTIFF画像をモザイクして一枚の画像にする:

$ gdalwarp "入力ファイル1" "入力ファイル2" ・・・ "出力ファイル名"
ワイルドカードも使える:
$ gdalwarp *.tif "出力ファイル名"

ピクセル値の抜き出し

gdallocationinfo -wgs84 filename [lon value] [lat value]

フォーマット変換

gdal_translate -of ENVI input.tif output   (GeoTIFFファイルをRawファイルにする)
↑ENVIは.hdrというヘッダファイルが付随するが, 本体はRaw。
gdal_translate -of GTiff input output.tif   (何かのフォーマットをGeoTIFFファイルにする)
↑入力ファイルのフォーマットはgdalが勝手に推測してくれるので指定せず。

GeoTiffファイルの内部圧縮

gdal_translate -co "COMPRESS=LZW" src.tif dest.tif

座標情報の付加・書き換え

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.

ogrinfo

# レイヤ名の一覧を表示
ogrinfo data
# 特定のレイヤの属性を表示
ogrinfo -summary data data_zokusei
または
ogrinfo -summary data -al
# sql構文
ogrinfo data data_zokusei -sql "select * from data_zokusei where hoge='piyo'"
# 単に属性を選択する場合は、下のようにも書ける
ogrinfo data data_zokusei -where "hoge='piyo'"

ogr2ogr

# 入出力のファイル順がgdal_translateと逆な点に注意!
ogr2ogr "出力ファイル名" "入力ファイル名"
Last modified:2023/10/04 13:26:23
Keyword(s):
References:[GDAL]