En un sentido genérico, utilice el transformación afín que deberían estar disponibles con cualquier formato de archivo raster. Con GDAL, esto está disponible con GetGeoTransform() o PostGIS ST_GeoReference() función. Después de encontrar estos seis parámetros, sólo hay que determinar cuáles son, entonces se puede hacer una función que se transforme en el 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, row=22, entonces las coordenadas del mundo real al centro del píxel son:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Algo similar se puede cocinar para PostGIS con ST_Affine() .
1 votos
¿El objetivo es poder consultar por Lat/Lon? Se podría conseguir con GDAL utilizando el atributo geotransformación - puedo proporcionar un ejemplo en python. La conversión podría ser pre-renderizada en un geotiff de 2 bandas (Banda1 - LAT, Banda2 - LON), pero me pregunto si no sería más eficiente hacerlo sobre la marcha. Supongo que un caso de uso ayudaría.