Jak znaleźć wartości lat / lon dla każdego piksela w pliku GeoTIFF?

9

Chcę przechowywać plik GeoTIFF piksel po pikselu w bazie danych. Muszę przechowywać wartości pikseli wraz z lat / lon tego piksela na obrazie GeoTIFF. czy jest to możliwe do zrobienia?

nehaarora
źródło
1
Czy celem jest zapytanie przez Lat / Lon? Można to osiągnąć za pomocą GDAL za pomocą atrybutu geotransform - mogę podać przykład w języku Python. Konwersję można wstępnie renderować w geotiff 2-pasmowy (Band1 - LAT, Band2 - LON), ale zastanawiam się, czy nie byłoby bardziej wydajne robić tego w locie. Myślę, że pomocny byłby przypadek użycia.
Jay Laura,

Odpowiedzi:

9

W ogólnym sensie użyj parametrów transformacji afinicznej , które powinny być dostępne w dowolnym formacie pliku rastrowego. W przypadku GDAL jest to dostępne z funkcją GetGeoTransform () lub funkcją ST_GeoReference () PostGIS . Po znalezieniu tych sześciu parametrów wystarczy ustalić, które z nich są, a następnie można wykonać funkcję transformacji w przestrzeni liniowej.

Np. Z Pythonem:

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)

Na przykład, jeśli piksel ma kolumnę = 10, wiersz = 22, wówczas rzeczywiste współrzędne do centrum pikseli to:

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

Coś podobnego można przygotować dla PostGIS za pomocą ST_Affine () .

Mike T.
źródło
1

Może to być nieco archaiczne: przekonwertuj piksele na punkty, dodaj pola lat i long oraz zapełnij wartości lat i long.

gm70560
źródło
0

Plik świata (.tfw), który towarzyszy GeoTIFF, zawiera:

  • rozmiar piksela w kierunku x (i kierunku y) w jednostkach mapy / piksel i
  • współrzędna x (i współrzędna y) środka lewego górnego piksela. To wszystko, czego potrzebujesz, aby obliczyć pozycję w Lat / Lon każdego piksela.
użytkownik15847
źródło
2
Oprócz tego, co opisujesz, musisz przynajmniej znać układ współrzędnych! (Plik światowy nie zawiera takich informacji.)
whuber
1
Ponadto nie każdy GeoTIFF zawiera plik światowy. Prawda GeoTIFF ma koordynować informacje przechowywane w nagłówku, a nie w osobnym pliku. Jednak termin „GeoTIFF” jest często stosowany do obrazów TIFF z plikiem światowym. Chodzi o to, że nie zawsze będzie TFW.