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.

KARTE
quelle
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

Underdunkel
quelle
17

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

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"
Micha
quelle
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.

Colin Stark
quelle
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.

Håvard Tveite
quelle
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.

Joost Beckers
quelle
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).

Sarracenia
quelle
-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.

Bharadwaj AK
quelle
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