値が0以下のすべてのピクセルをDEMラスターの「nodata」に設定するにはどうすればよいですか?


28

ピクセル値が約3000〜-0.0003のDEMラスターがあります。値が0で、より小さな(<= 0)のすべてのピクセルを「nodata」に設定する必要があります(後のラスター計算とファイルサイズの削減のため)。

これは、ラスター計算機(ピクセルの値を0未満に「nodata」に設定)または再分類(ピクセルの値を0未満に「nodata」に設定し、他のすべての値を保持)のタスクのようですノーハウ。


また、0未満の値を持つすべてのピクセルを「nodata」に設定する必要があります。したがって、vascobnunesからの投稿は私を助けてくれません。
MAP

申し訳ありませんが、ラスターの表示方法を変更することはできません。ラスターファイルを編集する必要があります。
MAP

コメントと閉鎖の提案から、質問を編集して、あなたが望むものとすでに試したものを正確に明確にする必要があるようです。
PolyGeo

回答:


29

ワンツールソリューションは見つかりませんでしたが、最初にラスター計算機を使用して特定のしきい値以下のすべての値をゼロにし、次にgdal_translateを-a_nodata 0で使用して0をnodataに変換できます。

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

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


17

以下は、範囲をNULLに設定するGRASS mapcalc式です。

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"

素晴らしい、私のために働く!
ilFonta

16

ラスター計算機のQGISで1ステップで実行できます。

QGIS3では、「x」という名前のラスターレイヤーに対して、次の式を使用します。

(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)

このトリックは、ラスター値x> 0を比率x / 1 = xにマッピングし、ラスター値x <= 0を比率0/0 = NaNにマッピングします。このNaNは、ラスターが4バイトのfloatの場合、FLOAT_MIN(別名-3.402832 ... e + 38)としてレンダリングされます。

奇妙なことに、この質問はしばらく前に行われたようで、ほとんどの回答者は(今日のGoogleのクイック検索からわかるように)単一のステップで行うことはできないと言っています。もちろん、このようにハッキングする必要はありません。QGISのドキュメントの方が良いかもしれません。


10

ドミニクに感謝します。私の最初の答えは、(式QGIS 2.8.3のための正しくない"myraster@1" > 0戻り0または非1 NODATAの入力、NODATAが返す入力NODATA)。

次QGIS ラスタ演算 QGISので、式は、十分な(「myraster」という名前のラスターレイヤー)でなければなりませんラスタ演算を する条件を満たさないすべてのピクセルに設定NODATAを

( "myraster @ 1"> 0)* "myraster @ 1"

以下のソリューションはhttps://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.htmlに基づいており、QGIS 2.8.3 with SAGA 2.1.2で動作します。

QGIS Processingで、SAGA Raster計算機を使用し、Formulaに以下を入力します。

ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))

または

ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))

これにより、0以下のすべての値がnodata(0/0)に変わります。


条件を満たさない画素がないNODATA、0をしているので、これは動作しません
ドミニク・

スーパー。ラスター値フィルターに使用できます。たとえば、フィルター(0.5; 23]:ifelse(g1 <0.5、0/0、ifelse(g1> 23、0/0、g1))
lolipop

10

レイヤーを保存し(右クリックして、名前を付けて保存...)、nodataの範囲を指定することもできます。これにより、元のnodataが保持され、指定された値の範囲に対して新しいnodataが作成されます。


これが最善の解決策である
アレクサンダー

5

同様の問題がありましたが、両方の値がラスター内のデータなし既存のデータなしの値に変換したかったのです。

結果を特定する

私は助けを求めてこのページに来ましたが、ここでのアプローチには注意点があると思います。@underdarkおよび@Michaのメソッドは、ラスターに既存のデータなしの値がない場合にのみ機能するようです。

これを回避するには、データなしの値と、データなしに変換する値の両方を一貫した数値に変換する必要があります。その後、@ underdarkの2番目のステップを使用してもかまいません。

これを行うには、Processing Toolbox> Reclassify Grid Values(SAGA)を使用して、値とデータなしの値を共通の数値(-999など)に同時に変換します。具体的には、メソッド「range」を使用して範囲を指定します。次に、データなしの値を置換する際に、この同じ値(たとえば-999)を選択します。他の値のチェックを外します。これは、単一の値の変更またはより複雑な変更に対しても機能します。

次に、@ underdarkの方法に従い、Raster> Conversion> Translateを使用してラスターを保存し、no-dataにチェックマークを付けて、使用した値(例:-999)を入力します。


-3

ラスターを右クリックし、ラスタープロパティに移動し、データ値なしのタブで3番目のオプション「透明度」を選択し、値0を追加して「適用」をクリックします。これは、arcgisの「背景値を表示」と同様のオプションです。


4
良い方法ではありません。実際にデータを変更しているわけではないため、統計の計算や分析が必要な場合、結果は不正確になります
-khafen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.