Nodata-Wert in QGIS neu auf Null definieren?


7

Ich habe ein Bild, das ich mit einem AOI-Polygon geschnitten habe. Der Konturbereich wurde auf Pixelwert = 0 gesetzt und ich habe einen Knotenwert von -32768. Ich möchte den Nodata-Wert in Null neu definieren. Früher habe ich dies mit ArcMap einfach im Rasterrechner gemacht, aber in QGIS sehe ich nicht, wie ich es machen könnte. Irgendwelche Ideen?


2
Möchten Sie es nur zur Visualisierung oder müssen Sie es auf null setzen, um weitere Rasterberechnungen durchzuführen?
Maning

Antworten:


13

In QGIS können Sie den Rasterrechner mit der folgenden Berechnung verwenden:

("your_raster" != -32768) * "your_raster"

Wenn bei dieser Berechnung der Zellenwert -32768 ist, erhalten Sie in dieser Zelle eine 0, und wenn er sich von -32768 unterscheidet, behält die Zelle den Wert bei, den sie hatte.


1
Schöne Lösung. Nur ein Hinweis für andere, die dies versuchen: In QGIS finden Sie den Knotenwert für eine Ebene unter den Ebeneneigenschaften, dann unter Informationen (oberes Element) und scrollen Sie nach unten zu Bänder.
John

Beachten Sie, dass dies bei Werten wie -3.40282e + 38 nicht funktioniert.
Georgie

12

Die einfachste einstufige und IMO beständigste und zuverlässigste Lösung für die Neuklassifizierung von NoData auf Null ist die Verwendung des SAGA-Tools (Reclassify Grid Values) in der Verarbeitungs-Toolbox.

Scrollen Sie nach Auswahl des zu klassifizierenden Rasters einfach zum Ende des Dialogfelds und stellen Sie sicher, dass das replace no data valuesKontrollkästchen aktiviert ist. Der Standardwert ist Null (aber Sie können natürlich auch etwas anderes ersetzen). Deaktivieren Sie dann das Kontrollkästchen replace other valuesund lassen Sie alle anderen Felder in Ruhe (Sie müssen also nur sicherstellen, dass ein Kontrollkästchen aktiviert ist, und ein anderes deaktivieren - es sind keine weiteren Einstellungen erforderlich).


1
Genau. Nichts anderes hat wirklich für mich funktioniert (mein Nodata-Wert war so etwas wie -3,4e + 38).
ArMoraer

Hatte genau das gleiche Problem wie @ArMoraer. Dies war die einfachste Lösung, funktionierte perfekt.
Rauni

Ich habe das Problem mit den Nodata auf 0 behoben, aber bis dahin hat es kleine Änderungen an meinen anderen Rasterwerten vorgenommen
ZKB

Leider scheint diese Methode in QGIS 3.8 nicht mehr zu funktionieren. Das Verarbeitungsformular wird nicht ausgeführt, ohne alle anderen Einstellungen zu ändern. Fehler: "Falscher oder fehlender Parameterwert: ...."
geordie

11

Ich habe eine Lösung dafür gefunden. Zuerst konvertiere ich das Bild in eine vrt-Ebene (gdalbuildvrt) mit -srcnodata 0, dann übersetze ich es zurück in eine tif-Datei mit gdal_translate -a_nodata. Hat gut funktioniert! :) :)


8

Ich denke, Sie können das mit dem Rasterrechner tun .

Wenn nicht mit Hilfe von GRASS Plugin und r.null werden Sie es einfach tun. Diese Option bedeutet, dass Sie zuerst ein GRASS-Mapset erstellen müssen, um Ihr Raster zu importieren.


5
Könnten Sie näher erläutern, wie das mit dem Rasterrechner geht?
Rudivonstaden

1
r.nullhabe es für mich getan.
Metasequoia

8

Da ich das gleiche Problem hatte, habe ich am Ende Python direkt verwendet - möglicherweise müssen Sie numpy.where für Ihren speziellen Zweck anpassen. Im folgenden Fall bleiben die Pixelwerte unverändert, wenn sie> = 0 sind. Alle anderen Pixel - in diesem Fall nur diejenigen mit dem Wert ohne Daten - werden auf "0" gesetzt.

import gdal, gdalconst, numpy
maskfile = gdal.Open('C:\Users\max\Desktop\Baltic2.tif', gdalconst.GA_Update)
maskraster = maskfile.ReadAsArray()
maskraster = numpy.where((maskraster >= 0), maskraster, 0 ) 
maskband = maskfile.GetRasterBand(1)
maskband.WriteArray( maskraster )
maskband.FlushCache()

1

Ich habe versucht, sowohl das Rastercalc-Plugin als auch den Raster-Rechner zu verwenden, und keiner hat funktioniert - Syntaxfehler. Was funktionierte, war das Warp-Tool und die Angabe der Quell- und Ziel-Nodata-Werte (siehe Antwort von underdark auf eine ähnliche Frage Wie kann man fehlende Werte von der Rasterebene ausschließen? )


1

Was für mich funktioniert hat, war, das Raster als .asc-Datei zu exportieren, dann in einem Texteditor zu öffnen und mithilfe von Suchen und Ersetzen den alten NoData-Wert durch den gewünschten Wert zu ersetzen.


1

In meinem Fall war es ein Satellitenbild, das ich in 8 Bit konvertieren musste, und es gab keine Datenwerte aus, wenn -scale in gdal_translate verwendet wurde.

Ich konnte das Problem lösen, indem ich das Raster (Ebene mit der rechten Maustaste -> Exportieren -> Ebene speichern unter ...) als gerenderte Daten in eine neue Datei exportierte (Kontrollkästchen oben im Dialogfenster).


0

Für Python-Skripte können Sie die folgende Zeile vor WriteArray verwenden.

maskband.SetNoDataValue(0)
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.