Wie finde ich Lat / Lon-Werte für jedes Pixel in einer GeoTIFF-Datei?

9

Ich möchte eine GeoTIFF-Datei Pixel für Pixel in der Datenbank speichern. Ich muss Pixelwerte zusammen mit dem Lat / Lon dieses Pixels im GeoTIFF-Bild speichern. Ist das möglich?

Nehaarora
quelle
1
Ist das Ziel, nach Lat / Lon abfragen zu können? Sie können dies mit GDAL mithilfe des Geotransform-Attributs erreichen - ich kann ein Python-Beispiel bereitstellen. Die Konvertierung könnte in einen 2-Band-Geotiff (Band1 - LAT, Band2 - LON) vorgerendert werden, aber ich frage mich, ob es nicht effizienter wäre, dies im laufenden Betrieb zu tun. Ich denke, ein Anwendungsfall würde helfen.
Jay Laura

Antworten:

9

Verwenden Sie im Allgemeinen die affinen Transformationsparameter , die für jedes Rasterdateiformat verfügbar sein sollten. Mit GDAL ist dies mit GetGeoTransform () oder der ST_GeoReference () -Funktion von PostGIS verfügbar . Nachdem man diese sechs Parameter gefunden hat, muss man nur noch bestimmen, um welche es sich handelt. Dann kann eine Funktion zur Transformation im linearen Raum erstellt werden.

ZB mit Python:

from osgeo import gdal
ds = gdal.Open('myfile.tif')

# unravel GDAL affine transform parameters
c, a, b, f, d, e = ds.GetGeoTransform()

def pixel2coord(col, row):
    """Returns global coordinates to pixel center using base-0 raster index"""
    xp = a * col + b * row + a * 0.5 + b * 0.5 + c
    yp = d * col + e * row + d * 0.5 + e * 0.5 + f
    return(xp, yp)

Wenn beispielsweise ein Pixel bei col = 10, row = 22 vorhanden ist, lauten die realen Koordinaten zur Pixelmitte:

>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)

Ähnliches kann für PostGIS mit ST_Affine () erstellt werden .

Mike T.
quelle
1

Dies kann etwas archaisch sein: Konvertieren Sie die Pixel in Punkte, fügen Sie Lat- und Long-Felder hinzu und füllen Sie sie mit Lat- und Long-Werten.

gm70560
quelle
0

Die Weltdatei (.tfw), die einem GeoTIFF beiliegt, enthält:

  • Pixelgröße in x-Richtung (und y-Richtung) in Karteneinheiten / Pixel und
  • x-Koordinate (und y-Koordinate) der Mitte des oberen linken Pixels. Dies ist alles, was Sie benötigen, um die Position jedes Pixels in Lat / Lon zu berechnen.
user15847
quelle
2
Zusätzlich zu dem, was Sie beschreiben, müssen Sie mindestens das Koordinatensystem kennen! (Eine
Weltdatei
1
Außerdem enthält nicht jedes GeoTIFF eine Weltdatei. Bei einem echten GeoTIFF werden die Koordinateninformationen im Header und nicht in einer separaten Datei gespeichert. Der Begriff "GeoTIFF" wird jedoch häufig auf TIFF-Bilder mit einer Weltdatei angewendet. Der Punkt ist, dass es nicht immer einen TFW geben wird.