Comment trouver les valeurs lat / lon pour chaque pixel d'un fichier GeoTIFF?

9

Je souhaite stocker un fichier GeoTIFF pixel par pixel dans la base de données. J'ai besoin de stocker les valeurs des pixels avec le lat / lon de ce pixel sur l'image GeoTIFF. Est-il possible de faire ça?

nehaarora
la source
1
Le but est-il de pouvoir interroger par Lat / Lon? Vous pouvez accomplir cela avec GDAL en utilisant l'attribut geotransform - je peux fournir un exemple python. La conversion pourrait être pré-rendue en un géotiff à 2 bandes (Band1 - LAT, Band2 - LON), mais je me demande s'il ne serait pas plus efficace de le faire à la volée. Je suppose qu'un cas d'utilisation aiderait.
Jay Laura

Réponses:

9

Dans un sens générique, utilisez les paramètres de transformation affine , qui devraient être disponibles avec n'importe quel format de fichier raster. Avec GDAL, cela est disponible avec GetGeoTransform () ou la fonction ST_GeoReference () de PostGIS . Après avoir trouvé ces six paramètres, il suffit de déterminer lesquels ils sont, puis une fonction peut être créée pour se transformer en espace linéaire.

Par exemple, avec 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)

Par exemple, s'il y a un pixel à col = 10, row = 22, alors les coordonnées réelles au centre du pixel sont:

>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)

Quelque chose de similaire peut être préparé pour PostGIS avec ST_Affine () .

Mike T
la source
1

Cela peut être un peu archaïque: convertissez les pixels en points, ajoutez des champs lat et long et remplissez avec des valeurs lat et long.

gm70560
la source
0

Le fichier mondial (.tfw) qui accompagne un GeoTIFF contient:

  • taille de pixel dans la direction x (et la direction y) en unités de carte / pixel et
  • Coordonnée x (et coordonnée y) du centre du pixel supérieur gauche. C'est tout ce dont vous avez besoin pour calculer la position en Lat / Lon de chaque pixel.
user15847
la source
2
En plus de ce que vous décrivez, vous devez au minimum connaître le système de coordonnées! (Un fichier mondial ne contient pas de telles informations.)
whuber
1
De plus, tous les GeoTIFF ne contiennent pas de fichier mondial. Un vrai GeoTIFF a les informations de coordonnées stockées dans l'en-tête, pas dans un fichier séparé. Cependant, le terme "GeoTIFF" est souvent appliqué aux images TIFF avec un fichier mondial. Le fait est qu'il n'y aura pas toujours de TET.