データピクセルがないためラスターを合計することはできません


11

毎日の土壌水分データを含む一連のラスター(.vrt)があります。月ごとの測定値を得るために、すべてのラスターのピクセルを合計します。ただし、毎日全世界がカバーされていないため、他の日にメジャーが存在する場所ではデータ値がありません。

私がしたいことは、各ラスターの値を合計することです。ただし、nodataピクセルが合計に含まれるたびに、結果のピクセルはnodataとして直接分類されるようです。私は逆に、すべてのnodata値を無視し、残りを合計します。

私は問題を解決する2つの方法を考えました:

  1. nodata値を無視してラスターを合計する
  2. nodataピクセルを値0に変換してから、すべてのラスターを合計する

ここに画像の説明を入力してください

残念ながら、これを行うためのツールが見つかりません。

誰も私を助けることができますか?


結果はどのように解釈できるのだろうか:結局、合計には欠落している日の値は含まれず、欠落しているデータの量に応じてさまざまな量で低くバイアスされることを示します。欠落したデータの任意のかなりの量がある場合は、代わりに考慮すべきであるまたは予測値が欠落した細胞で、その後の和を実行します。
whuber

1
このコメントをありがとう。データの管理者に尋ねたところ、利用可能なすべてのデータを合計して平均値を計算し、そのピクセルで観測が利用できる月内の日数で割ったと言われました。
ダミアン

2
これは、すべてのNoDataセルを無視するようにGISに指示するラスタースタックのローカル平均と同じです。これは、別の方法を示しています。ところで、欠落している観測値が値と相関している場合、この手順は依然として潜在的に偏っています。たとえば、雲量が原因でデータが欠落している場合、その日は通常よりも土壌の水分が(平均して)高い可能性があります。
whuber

1
さて、「nodata nodata」がチェックされた状態でセル統計ツールをテストしたところ、まさに望みどおりの結果が得られました。私はそのような方法の欠点を認識しています。しかし、私の仕事は空間と時間の両方でかなり大規模であるため、そのようなバイアスはそれほど重要ではないと思います。とにかく、私は実際にはそれほど多くのデータの選択肢がありません。
ダミアン

スケールはバイアスの量に関係しません。バイアスの重要性は、そのサイズとそれに対するアプリケーションの感度に依存します。あなたがデータについて何かをすることはできないかもしれませんが、あなたはない、それらを分析するための手順を制御することができます。これを改善する方法はたくさんあります。オプションには、時間の経過に伴う補間と、土壌水分と相関している可能性があり、欠落している日付でも使用可能な共変量に対する回帰があります。(欠損値に「
影響を与える

回答:


1

ArcGISにアクセスできる場合、セル統計ツールには、ラスタをsum \ mean \ min \ maxしたnodataを無視するオプションがあります。


この答えを修正して「sum」を「average」に置き換えると、正しい結果になります。理由については、質問のコメントスレッドを参照してください。
whuber

平均値を取得したいので、加算は私の問題の一部に過ぎません。確認したところ、セル統計ツールは、nodataピクセルを無視してラスターを合計する最も簡単な方法でもあります。
ダミアン

11

まず、gdal_calc.pyを使用して、すべての-9999を0に変更し、NoData値を0に設定できます。

例えば:

gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --calc="A+9999*(A==-9999)" --NoDataValue=0

次に、gdal_translate-a_nodataオプションの後にnoneを使用して、NoData値を無視できます。

-a_nodata

指定されたnodata値を出力バンドに割り当てます。GDAL 1.8.0以降、noneに設定して、ソースファイルにnodata値が存在する場合に出力ファイルにnodata値を設定しないようにすることができます。

例:

gdal_translate -a_nodata none input_with_NoData.tif output_without_NoData.tif

ヒントをありがとう。-a_nodataパラメーターを少し試してみたところ、NULLではなく-9999の値を使用できました。ただし、-9999ピクセルをすべて0に変更する必要があります
ダミアン

1
gdal_calc.pyを使用して、適用する前に-9999をすべて0に変更できますgdal_translate -a_nodata none ...。例: gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --type=Int16 --calc="A+9999*(A==-9999)" --NoDataValue=0
アントニオファルチャーノ

いくつかのコマンドを試しましたが、gdal_calc.pyに問題があると本当に思います。たとえば、ラスター全体(i.imgur.com/WiZG7MC.png)に1を追加しようとしたところ、このMaxrepeatエラーが発生しました。わかりません。OSGeoシェルからコマンドを直接実行しました。このモジュールは、シェル(i.imgur.com/fgtMZQZ.png)を開くとリストに表示されるため、正しくインストールされているようです。インストールが壊れていますか?
ダミアン

正規表現の問題のようです... cdコマンドを使用して作業ディレクトリを変更してみてください-A test.tif
アントニオファルチャーノ

1
それは私のために動作しますが、私はOSGeo4Wインストーラを介してすべてのものをインストールしました。代わりに、スタンドアロンインストーラーを介してQGISをインストールしたことがわかります。そのため、セットアップを更新/更新してみてください。
アントニオファルチャーノ

5

Rで:

library(raster)
s <- stack('file1', 'file2', ...)
ss <- sum(s, na.rm=TRUE)

このコードの説明(コードを書いた場合)または見つけた場所へのリンクを、サイトからの短い要約とともに追加してもらえますか?
ポール

1
上記は最初にラスターパッケージをロードし、次に「スタック」(各ファイルがこのスタックのスライスになる同一の範囲と解像度のラスターファイルの3次元配列)を作成します。ファイルはコンマ区切りのファイル名で示されます。最後の行は、スタックのすべてのスライスを横切って細胞ごとの和を実行s引数と、na.rm=TRUEその結果NAの値は無視されます。出力オブジェクトssは、rasterエクスポート可能なオブジェクトですwriteRaster(を参照?writeRaster)。(@RobertHはR rasterパッケージの作成者です。)
jbaums 14年

1

Spatial Analystの条件付きツールは、null値をゼロに変換する簡単な方法です。その後、合計を取ることは簡単です。


お返事ありがとうございます。私はこの投稿に従いました:support.esri.com/fr/knowledgebase/techarticles/detail/34932 、すべてのヌルピクセルを0に変換できました。しかし、この操作をすべてのラスターに対して実行できるようにしたいと思いましたディレクトリ。QGISの「グリッド値の再分類」はこれを行うことができるようですが、それがどのように機能するのか私は知りません。私は「単純なテーブル」の方法を選択し、0に設定nullにそれを聞いて、そして428から3491まで、それはもともとスパンながら0.08 -0.99から他の値が、結果のラスタの範囲を変更しない
ダミアン

元のラスターの抜粋をどこかに投稿できますので、ご覧ください。
til_b

2
ツールを右クリックすると、必要な数のファイル、つまりディレクトリ全体でバッチプロセスを実行できます。
ブロック

ご回答有難うございます。ただし、「空間アナリスト/マップ代数/ラスター計算機」を使用して、1つのファイルのすべてのNULLを0に変換できます。このツールを正しくクリックすると、ディレクトリをバッチ処理できますが、各ファイルを自動的に考慮するための構文はどうなりますか?(i.imgur.com/aYaUCzz.png
ダミアン

「空間分析/再分類/再分類」ツールを見てみたところ、まさに望みどおりに機能します。複数のファイルを一度に処理するために、バッチウィンドウを使用することができました。最後の問題があります。「出力ラスター」を右クリック/入力すると、すべての入力ラスターに同じ出力ファイルがコピーされます。入力ごとに異なる出力を作成するにはどうすればよいですか?(i.imgur.com/jzTI2x9.png
ダミアン

1

私は少し前に同じ問題を抱えていましたが、それをなんとか解決しました。

QGISでのnodata値の表示についてのメモと同様に、nodata値は、実際に値が-9999、0、NULLなどであるかどうかに関係なく、マップウィンドウおよび「オブジェクト情報」ツールを使用するときにnodata値として常に表示されます。したがって、nodata値を0に再分類した後、レイヤー設定に移動すると、メタデータでnodataの値が0であることがわかります。

私はついに、クエストに最適なツール、GRASSを見つけましたr.series。[集計操作]設定[最大]および[NULLの伝播]をオフにすると、ツールは要件に合ったレイヤーを作成します。


0

私はしばらく前にこの問題を抱えていたことを覚えています。解決策として、ラスター内のすべてのセルに+1し、ラスターを一緒に追加してから、最後の減算を行いました(ただし、追加した+1の数が多い)。それはかなり粗野ですが、仕事が終われば...!

または、QGISの[処理]ツールボックスで[グリッド値の再分類]を使用して、null値をゼロに変換します。


こんにちは、「グリッド値の再分類」ツールを使用する多くの方法を試しましたが、成功しませんでした。すべてのNULLピクセルを-9999に変換したラスターで開始しました。メソッド[0] singleを使用して再分類し、「古い値= -9999」、「新しい値= 0.0」、「演算子:[0] =」を設定しようとしましたが、取得できるのは「nan」でいっぱいのラスターだけですピクセル。私は何を間違えていますか?
ダミアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.