Quero armazenar um arquivo GeoTIFF pixel por pixel no banco de dados. Preciso armazenar valores de pixel junto com a lat / lon desse pixel na imagem GeoTIFF. É possível fazer isso?
Quero armazenar um arquivo GeoTIFF pixel por pixel no banco de dados. Preciso armazenar valores de pixel junto com a lat / lon desse pixel na imagem GeoTIFF. É possível fazer isso?
Respostas:
Em um sentido genérico, use os parâmetros de transformação afim , que devem estar disponíveis em qualquer formato de arquivo rasterizado. Com o GDAL, ele está disponível com a função GetGeoTransform () ou ST_GeoReference () do PostGIS . Depois de encontrar esses seis parâmetros, é preciso apenas determinar quais eles são; então, uma função pode ser criada para transformar no espaço linear.
Por exemplo, com 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 exemplo, se houver um pixel em col = 10, linha = 22, as coordenadas do mundo real para o centro do pixel são:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Algo semelhante pode ser elaborado para o PostGIS com ST_Affine () .
O arquivo mundial (.tfw) que acompanha um GeoTIFF contém: