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?
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?
Antworten:
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 .
Die Weltdatei (.tfw), die einem GeoTIFF beiliegt, enthält: