Je souhaite stocker un fichier GeoTIFF pixel par pixel dans la base de données. J'ai besoin de stocker les valeurs des pixels avec le lat / lon de ce pixel sur l'image GeoTIFF. Est-il possible de faire ça?
Je souhaite stocker un fichier GeoTIFF pixel par pixel dans la base de données. J'ai besoin de stocker les valeurs des pixels avec le lat / lon de ce pixel sur l'image GeoTIFF. Est-il possible de faire ça?
Réponses:
Dans un sens générique, utilisez les paramètres de transformation affine , qui devraient être disponibles avec n'importe quel format de fichier raster. Avec GDAL, cela est disponible avec GetGeoTransform () ou la fonction ST_GeoReference () de PostGIS . Après avoir trouvé ces six paramètres, il suffit de déterminer lesquels ils sont, puis une fonction peut être créée pour se transformer en espace linéaire.
Par exemple, avec 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)
Par exemple, s'il y a un pixel à col = 10, row = 22, alors les coordonnées réelles au centre du pixel sont:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Quelque chose de similaire peut être préparé pour PostGIS avec ST_Affine () .
Le fichier mondial (.tfw) qui accompagne un GeoTIFF contient: