¿Cómo encontrar valores de lat / lon para cada píxel en un archivo GeoTIFF?

9

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?

nehaarora
fuente
1
¿El objetivo es poder realizar consultas por Lat / Lon? Puede lograr esto con GDAL utilizando el atributo geotransform: puedo proporcionar un ejemplo de Python. La conversión podría ser renderizada previamente en un geotiff de 2 bandas (Band1 - LAT, Band2 - LON), pero me pregunto si no sería más eficiente hacer esto sobre la marcha. Supongo que un caso de uso ayudaría.
Jay Laura

Respuestas:

9

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 () .

Mike T
fuente
1

Esto puede ser un poco arcaico: convierta los píxeles en puntos, agregue campos largos y largos y complete con valores largos y largos.

gm70560
fuente
0

El archivo mundial (.tfw) que acompaña a un GeoTIFF contiene:

  • tamaño de píxel en la dirección x (y dirección y) en unidades de mapa / píxel y
  • Coordenada x (y coordenada y) del centro del píxel superior izquierdo. Esto es todo lo que necesita para calcular la posición en Lat / Lon de cada píxel.
usuario15847
fuente
2
¡Además de lo que describe, como mínimo necesita conocer el sistema de coordenadas! (Un archivo mundial no incluye dicha información.)
whuber
1
Además, no todos los GeoTIFF contienen un archivo mundial. Un verdadero GeoTIFF tiene la información de coordenadas almacenada en el encabezado, no en un archivo separado. Sin embargo, el término "GeoTIFF" a menudo se aplica a las imágenes TIFF con un archivo mundial. El punto es que no siempre habrá un TFW.