Hallo HaMyr,
du hast recht, das hat mit der Projektion im GIS nichts zu tun. In der Aufnahme von 2018 gibt es überall einen Shift von 1 Pixel nach Süden. Ich habe mal etwas nachgeforscht und es ist wohl so, dass das das ein bekanntes Problem von Sentinel-2 Daten ist. Dazu aus dem
S2 Technical Guide der ESA > Geometric Performance: "Absolute Lageunsicherheit: 20 m 2σ ohne GCPs und 12,5 m 2σ mit GCPs", d.h. genau diese Ungenauigkeit von 1-2 Pixeln.
Kleiner Trost: Sentinel-2 Produkte werden laufend verbessert. Laut dem aktuellen
Data Quality Report beträgt der Lagefehler inzwischen nur noch einen halben Pixel (5,6 m für S2A und 5,4 m für S2B). Je aktueller also die Daten, desto besser die Lagegenauigkeit.
Um die Raster genau übereinander zu bekommen, muss man also wirklich selbst nachhelfen. Um einen Rasterlayer einfach zu verschieben, gibt es in ArcGIS im Toolset „Projektionen und Transformationen“ > „Toolset Raster“ das Werkzeug „Verschieben“. In QGIS habe ich nichts Vergleichbares gefunden. Raster > Georeferenzierung würde vielleicht noch gehen, schien mir aber umständlich. Bearbeiten der World-Datei geht bei GeoTIFF auch nicht einfach im Editor, also bleibt noch die Python-Konsole (Menü > Erweiterungen > Python-Konsole). Aber Achtung, diese Methode überschreibt die Koordinaten deiner Quelldatei. Zur Sicherheit solltest du eine Kopie der NDVI-Datei erstellen und diese dafür verwenden. Im Editor gibst du ein (
Quelle):
Code: Alles auswählen
from osgeo import gdal
raster = gdal.Open('C:\\dein\\Pfad\\zur\\Rasterdatei.tif', 1)
gt = raster.GetGeoTransform()
gtl = list(gt)
#gtl[0] -= 10 # 10 m (1 Pixel) nach Westen verschieben
#gtl[0] += 10 # 10 m (1 Pixel) nach Osten verschieben
#gtl[3] -= 10 # 10 m (1 Pixel) nach Süden verschieben
gtl[3] += 10 # 10 m (1 Pixel) nach Norden verschieben
raster.SetGeoTransform(tuple(gtl))
raster = None

- Python-Konsole.png (66.82 KiB) 21201 mal betrachtet
und passt die Verschiebung entsprechend an. In diesem Beispiel habe ich das Raster um 1 Pixel nach Norden verschoben. Das # benutzt du zum Auskommentieren, alles was hinter einem # in derselben Zeile steht, wird nicht ausgeführt.
Du kannst auch die Meter-Angaben anpassen und z.B. nur um einen halben Pixel verschieben.
Dann startest du das Script mit Klick auf das grüne Dreieck oben. Wenn das erfolgreich war, erscheint in der Konsole:
Code: Alles auswählen
exec(open('C:/Users/anco/AppData/Local/Temp/tmp2cbds65q.py'.encode('utf-8')).read())
Zum Schluss lädst du das Raster neu in QGIS ein.

- vorher_nachher.png (28.65 KiB) 21202 mal betrachtet