Wie setze ich alle Pixel mit dem Wert <= 0 auf "nodata" im DEM-Raster?


28

Ich habe ein DEM-Raster mit Pixelwerten zwischen ca. 3000 und -0.0003. Ich muss alle Pixel mit einem Wert von 0 und kleiner (<= 0) auf "nodata" setzen (für spätere Raster-Berechnungen und um die Dateigröße zu reduzieren).

Es scheint für mich, dass dies eine Aufgabe für den Rasterrechner (eingestellter Wert von Pixeln <= 0 bis "nodata") oder eine Neuklassifizierung (eingestellter Wert von Pixeln <= 0 bis "nodata" und alle anderen Werte behalten) ist, aber ich weiß nicht Fachwissen.


Ich muss auch alle Pixel mit einem Wert von <0 auf "nodata" setzen. Die Post von vascobnunes hilft mir also nicht.
MAP

Es tut mir leid, aber es hilft mir nicht, den Stil für die Anzeige des Rasters zu ändern. Ich muss meine Rasterdatei unbedingt bearbeiten.
KARTE

Aus den Kommentaren und Abschlussvorschlägen geht hervor, dass Sie Ihre Frage bearbeiten sollten, um genau zu klären, was Sie wollen und was Sie bereits ausprobiert haben.
PolyGeo

Antworten:


29

Ich habe keine Ein-Werkzeug-Lösung gefunden, aber Sie können zuerst mit dem Raster-Rechner alle Werte unter einem bestimmten Schwellenwert auf Null setzen und dann mit gdal_translate mit -a_nodata 0 die 0 in Nodata umwandeln.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben


17

Hier sind die GRASS mapcalc-Ausdrücke, um einen Bereich auf NULL zu setzen:

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

Großartig, funktioniert für mich!
ilFonta

16

Dies kann in QGIS in einem Schritt im Rasterrechner erfolgen.

Verwenden Sie in QGIS3 für eine Rasterebene mit dem Namen "x" den folgenden Ausdruck:

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

Dieser Trick ordnet Rasterwerte x> 0 dem Verhältnis x / 1 = x und Rasterwerte x <= 0 dem Verhältnis 0/0 = NaN zu. Diese NaN wird als FLOAT_MIN (aka -3.402832 ... e + 38) gerendert, wenn das Raster ein 4-Byte-Float ist.

Seltsamerweise scheint diese Frage eine Weile her zu sein, und die meisten Befragten sagten (soweit meine heutige schnelle Google-Suche zeigt), dass dies nicht in einem einzigen Schritt erledigt werden kann. Es sollte auf keinen Fall so gehackt werden müssen. Die QGIS-Dokumentation könnte auch besser sein.


10

Vielen Dank an Dominik. Meine erste Antwort ist für QGIS 2.8.3 nicht korrekt (der Ausdruck "myraster@1" > 0gibt 0 oder 1 für Nicht- Dateneingaben zurück , für Nodateneingaben gibt er Nodaten zurück ).

Der folgende QGIS Raster Calculator- Ausdruck sollte ausreichen (Raster-Layer mit dem Namen "myraster"), da der QGIS Raster Calculator alle Pixel, die die Bedingung nicht erfüllen, auf Nodata setzt :

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

Die folgende Lösung basiert auf https://docs.qgis.org/2.8/de/docs/training_manual/processing/no_data.html und funktioniert für QGIS 2.8.3 mit SAGA 2.1.2.

Verwenden Sie in der QGIS-Verarbeitung den SAGA- Raster-Rechner und geben Sie Folgendes in die Formel ein :

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

oder

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

Dadurch werden alle Werte kleiner oder gleich 0 in Knoten (0/0) umgewandelt.


Dies funktioniert nicht, weil Pixel, die die Bedingung nicht erfüllen, 0 sind, keine Knoten
Dominik

Super. Kann für Rasterwertfilter verwendet werden: Zum Beispiel Filter (0.5; 23]: ifelse (g1 <0.5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop

10

Sie können den Layer auch speichern (Rechtsklick, Speichern unter ...) und einen Knotendatenbereich angeben. Dadurch werden die ursprünglichen Knoten beibehalten und neue Knoten für den angegebenen Wertebereich erstellt.


Dies ist die beste Lösung
Alexander

5

Ich hatte ein ähnliches Problem, aber BEIDE Werte, die ich in No-Data- UND vorhandene No-Data-Werte im Raster konvertieren wollte .

Ergebnisse identifizieren

Ich bin auf diese Seite gekommen, um Hilfe zu erhalten, aber ich denke, dass die Ansätze hier eine Einschränkung enthalten. Die Methoden von @underdark und @Micha scheinen nur zu funktionieren, wenn im Raster keine Werte ohne Daten vorhanden sind.

Um dies zu umgehen, müssen Sie sowohl die No-Data-Werte als auch die Werte, die Sie in No-Data konvertieren möchten, in eine konsistente Zahl konvertieren. Es ist dann in Ordnung, den zweiten Schritt von @underdark zu verwenden.

Verwenden Sie dazu die Processing Toolbox> Reclassify Grid Values ​​(SAGA), um die Werte und die Werte ohne Daten gleichzeitig in eine gemeinsame Zahl (z. B. -999) umzuwandeln. Verwenden Sie insbesondere die Methode "range" und geben Sie den Bereich an. Wählen Sie dann unter Keine Daten ersetzen denselben Wert aus (z. B. -999). Deaktivieren Sie die Option zum Ersetzen anderer Werte. Dies funktioniert für eine einzelne Wertänderung oder auch für komplexere Änderungen.

Folgen Sie dann der Methode von @underdark und speichern Sie das Raster mit Raster> Conversion> Translate, und kreuzen Sie no-data an, und geben Sie den von Ihnen verwendeten Wert ein (z. B. -999).


-3

Klicken Sie mit der rechten Maustaste auf das Raster, gehen Sie zu den Rastereigenschaften, wählen Sie die dritte Option "Transparenz" aus, fügen Sie auf der Registerkarte "Kein Datenwert" den zusätzlichen Wert 0 hinzu und klicken Sie auf "Anwenden". Dies ist die ähnliche Option "Hintergrundwert anzeigen" in arcgis.


4
Keine gute Methode. Sie ändern die Daten nicht wirklich. Wenn Sie also Statistiken berechnen oder Analysen durchführen müssen, sind die Ergebnisse falsch
khafen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.