これは FOSS4G Advent Calendar 2016の13日目の記事です。
今年はどんなことを書こうかな、とか思ってたら..ここまでみなさん トバしてますね…
あがりっぱなしなハードルをここでぐっと下げるために
今年(2016年)にあった各種のアップデートの中で、あ、これ便利だなー と思ったことをそのまま書きます。 以降、超地味な内容です(派手なのむり
結構前になりますが2016年の5月にGDAL 2.1.0 がリリースされました。
http://trac.osgeo.org/gdal/wiki/Release/2.1.0-News
いろいろあるアップデートのなかで、Pythonでの取り扱いが便利になったところが私にはぐっときました。
GDALに用意されているコマンドラインユーティリティ(gdal_translateとかgdalwarpなど)はとても便利です。
Pythonでこれらのコマンドと同じ処理を行いたいなーというときには
- subprocessとしてGDALのコマンドを呼び出す
- array(配列)として吐き出して各種の処理をする
という手続きを踏んでいました(私は)。
もちろんこれでも十分楽に扱えるのですが、
大変ものぐさなわたしは
もすこしシンプルに同等の処理を書けたらいいなー
とか思っておりました。
これが誰かに伝わったのか(そんなわけないですが
GDAL/OGR utilities as a libraryというRFCがGDAL2.1で採用されておりました。
Python bindingの項をみますと
For Python bindings, convenience wrappers are created to allow specifying options in a more user friendly way.
とあります。
まえよりわかりやすくオプションを指定できる便利なラッパーができたよー とのことですね。
それではみてみましょう。
いちばん単純なフォーマットの変換処理を例に取りますと、
1 |
gdal_translate -of HFA C:/temp/in.tif C:/temp/out.img |
というコマンドと同じ処理を、いままでPythonでこんな風に書いていました(私は)。
1 2 3 4 |
from osgeo import gdal srcrs = gdal.Open("C:/temp/in.tif") driver = gdal.GetDriverByName("HFA") dstrss = driver.CreateCopy("C:/temp/out.img", srcrs) |
んで、GDAL 2.1 x Python ではどーなるかといいますと..
1 2 |
from osgeo import gdal gdal.Translate("C:/temp/out.img", "C:/temp/in.tif", format = 'HFA') |
と、とてもシンプルに書ける様になりました。
もひとつ例を挙げるとラスタデータの投影変換はこんなコマンドですが
1 |
gdalwarp -of GTiff -s_srs EPSG:4326 -t_srs EPSG:32654 -tr 90 90 -r bilinear C:/temp/in_gcs.tif C:/temp/out_u54.tif |
GDAL 2.1 x Pythonでは…
1 2 3 4 |
from osgeo import gdal gdal.Warp("C:/temp/out_u54.tif","C:/temp/in_gcs.tif", srcSRS="EPSG:4326",dstSRS="EPSG:32654",xRes=90,yRes=90, resampleAlg="bilinear") |
という感じです。オプションの指定がとてもわかりやすくてヨイです。
もちろんラスタデータに対して複雑な処理をするときはarray(配列)にしたほうが便利なのですが、単純なデータ処理(フォーマットの変換 投影変換 クリップなどなど)をしたいときにすっきり書けてうれしいです。
その他の処理やオプションについての詳細はこちらを参照ください。
http://gdal.org/python/
すこし古い話ではありますが私にとってありがたいアップデートだったので書いてみました。
ではでは。よいお年を(まだ早い