2
コマンドラインからではなく、Pythonスクリプトから呼び出されたときにgdalwarpが空のラスターを生成する
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に問題があるようですが、何をどのように修正すればよいですか?