とらりもんHOME  Index  Search  Changes  Login

GDAL

GDALとは

  • GDALはGeospatial Data Abstraction Libraryの略。ジーダルではなくグドールと読むらしい。
  • ラスター(画像のようなメッシュ)形式のGISデータを処理するライブラリ。
    • ベクターを処理する場合はogr
  • GISソフトを起動してごちゃごちゃやらないとできないような処理が, GDALではLinuxのコマンドラインからさくっとできてしまう。
  • Linuxだけでなく,Windowsでも動作する。
  • http://www.geopacific.org/opensourcegis/gdal-ogr/gdal-commands

インストール方法 (Ubuntu Linux)

シェルコマンドだけ: sudo apt-get install gdal-bin
pythonから使う: sudo apt-get install python-gdal python3-gdal

使い方メモ(シェル)

  • 地図投影法の変換など → 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 ...
    • ただし, いくつかの特定バンドだけ抜き出すのは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
  • 画像の切り出し
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は, 同じファイル名のファイルがあると上書きしてくれないことがある。まず既存のファイルの削除を!!
  • ヘッダ情報の追加、フォーマット変換、画像拡大縮小など → 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 -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.

使い方メモ(python) http://www.gdal.org/gdal_tutorial.html

import gdal, gdalconst
from gdalconst import *
ds=gdal.Open("N14E105_W02DC068DR_sl_HV")

使い方メモ(OGR)

  • 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 "出力ファイル名" "入力ファイル名"

C++ライブラリ

sudo apt-get install libgdal-dev libgdal1-dev libgdal1h gdal-bin
  • CE_None ... GDALの記号定数で, =0。意味はNo erro。
  • GDALDatasetクラスとGDALRasterBandクラス
  • nodataの値はどこに記録されているのか?
Last modified:2019/03/30 16:15:37
Keyword(s):
References:[とらりもんHOME] [When you don't know how to do it.]