Quiero almacenar un archivo GeoTIFF píxel por píxel en la base de datos. Necesito almacenar valores de píxeles junto con el lat / lon de ese píxel en la imagen GeoTIFF. ¿Es posible hacer eso?
Quiero almacenar un archivo GeoTIFF píxel por píxel en la base de datos. Necesito almacenar valores de píxeles junto con el lat / lon de ese píxel en la imagen GeoTIFF. ¿Es posible hacer eso?
Respuestas:
En un sentido genérico, use los parámetros de transformación afines , que deberían estar disponibles con cualquier formato de archivo ráster. Con GDAL, esto está disponible con GetGeoTransform () , o la función ST_GeoReference () de PostGIS . Después de encontrar estos seis parámetros, uno solo necesita determinar cuáles son, luego se puede hacer una función para transformar en espacio lineal.
Por ejemplo, con 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)
Por ejemplo, si hay un píxel en col = 10, fila = 22, las coordenadas del mundo real al centro de píxeles son:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Algo similar se puede preparar para PostGIS con ST_Affine () .
El archivo mundial (.tfw) que acompaña a un GeoTIFF contiene: