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?
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?
Odpowiedzi:
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 () .
Plik świata (.tfw), który towarzyszy GeoTIFF, zawiera: