Pythonでgdalwarpを使用して、いくつかのラスターデータ(すべての.tif)をより粗い解像度(.05度から.25度まで)に集約しようとしていますが、コマンドは機能しません。広範囲の値を持つ出力を取得する代わりに、出力のすべての値は0です。解像度とピクセル深度/タイプは正しいですが、値は正しくありません。
gdalwarpコマンドのドキュメントは次のとおりです:http ://www.gdal.org/gdalwarp.html
2つの入力ファイルがあり、最大.25度の解像度で集約し、いくつかの出力を生成します。
'NDVI_raster':最初の入力は、NDVIを表す16ビットの符号付きラスターで、値の範囲は-10,000〜10,000、nodata値は-15,000です。
'nodata_mask':2番目は、NoDataマスク、32ビット浮動小数点数で、1 =「正常」データの値、0 = NoDataです。
「NDVI_raster」を入力として使用して、それぞれが異なる統計を表す7つの異なる出力を生成します。これを行うには、gdalwarpを7回呼び出します。そのたびに、リサンプリング方法(-r)を次のいずれかに設定します:平均、モード、最大、最小、中央値、q1、q2。出力をNDVI_ave.tif、NDVI_mode.tifなどと呼びます。現在、GDAL 1.10.1を使用しています。これは、平均とモードのみを許可するため、これら2つの統計のみを使用してテストしています。
「nodata_mask」を入力として使用して、最終的にQAL(品質保証レイヤー)を生成したいと思います。これを行うには、gdalwarpを使用し、リサンプリングモードを「平均」に設定して、最大.25度まで集計します。これにより、各ピクセルは、入力からの良好なピクセル/合計ピクセルの比率を表します。出力QALを呼び出します。
これが私のコードの内容です(最初の入力の例としてモードを使用)。
os.system('gdalwarp -tr .25 .25 -r mode -srcnodata -15000 %s %s' % (NDVI_raster, NDVI_mode))
QAレイヤーの場合:
os.system('gdalwarp -tr .25 .25 -r average -srcnodata -15000 %s %s' % (nodata_mask, QAL))
結果は正しい解像度、投影、ピクセル深度のラスターですが、ピクセル値はすべて0です。
python / gdalに詳しい人は何が起こっているのか知っていますか?
コマンドライン(linux)からgdalwarpコマンドを呼び出すと、目的の結果が得られます。os.systemを使用してpythonからgdalwarpを呼び出すと、空のラスターが表示されます。それで、おそらく私のgdal / pythonバインディングに何か問題がありますか?
os.system経由でコマンドを呼び出す代わりに、サブプロセスを使用しました。この方法によるツールもスムーズに実行されているように見えますが、結果は同じで、0でいっぱいのラスターです。
gdalwarp呼び出しをbashシェルスクリプトに入れて、Pythonからそのシェルスクリプトを呼び出してみましたが、結果は0ではなく-1の束になります。奇妙なことに、私は以前にそれをテストしたことがあり、それが機能することはかなり確かですが、テストがサーバーから削除されてしまい、何らかの理由で再作成できなくなりました。
gdalwarpコマンドをbashシェルスクリプトに入れ、コマンドラインからそのシェルスクリプトを呼び出すと、目的の結果が得られます。ただし、Pythonから同じシェルスクリプトを呼び出すことはできません。Pythonに問題があるようですが、何をどのように修正すればよいですか?
os.system
実際にシェルを起動し、指定されたコマンドを実行します。戻り値に加えて、渡そうとしている変数を確認する必要があります(引用の問題など?)
os.system
、subprocess
どちらが新しいモジュールであり、多くの(セキュリティ)改善が含まれているからの移行を検討する必要があります。
-ot Float32
、整数のラスタでは分数を表すことができないため、品質マスクに指定する必要があるかと思います。