Como encontrar valores lat / lon para cada pixel em um arquivo GeoTIFF?

9

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?

nehaarora
fonte
11
O objetivo é poder consultar por Lat / Lon? Você pode fazer isso com o GDAL usando o atributo geotransform - posso fornecer um exemplo de python. A conversão pode ser pré-renderizada em um geotiff de 2 bandas (Band1 - LAT, Band2 - LON), mas me pergunto se não seria mais eficiente fazer isso em tempo real. Eu acho que um caso de uso ajudaria.
Jay Laura

Respostas:

9

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

Mike T
fonte
1

Isso pode ser um pouco arcaico: converta os pixels em pontos, adicione campos lat e long e preencha com valores lat e long.

gm70560
fonte
0

O arquivo mundial (.tfw) que acompanha um GeoTIFF contém:

  • tamanho de pixel na direção x (e direção y) em unidades de mapa / pixel e
  • coordenada x (e coordenada y) do centro do pixel superior esquerdo. É tudo o que você precisa para calcular a posição em Lat / Lon de cada pixel.
user15847
fonte
2
Além do que você descreve, você precisa conhecer no mínimo o sistema de coordenadas! (Um arquivo mundial não inclui essas informações.)
whuber
11
Além disso, nem todo GeoTIFF contém um arquivo mundial. Um GeoTIFF verdadeiro possui as informações de coordenadas armazenadas no cabeçalho, não em um arquivo separado. No entanto, o termo "GeoTIFF" é frequentemente aplicado a imagens TIFF com um arquivo mundial. O ponto é que nem sempre haverá um TFW.