Я хочу зберігати файл GeoTIFF піксель за пікселем у базі даних. Мені потрібно зберігати значення пікселів разом з lat / lon цього пікселя на зображенні GeoTIFF. Чи можна це зробити?
Я хочу зберігати файл GeoTIFF піксель за пікселем у базі даних. Мені потрібно зберігати значення пікселів разом з lat / lon цього пікселя на зображенні GeoTIFF. Чи можна це зробити?
Відповіді:
У загальному сенсі використовуйте параметри афінного перетворення , які повинні бути доступні у будь-якому растровому форматі файлу. З GDAL це доступно за допомогою функції GetGeoTransform () або PostGIS ST_GeoReference () . Знайшовши ці шість параметрів, потрібно лише визначити, якими вони є, тоді можна зробити функцію перетворення в лінійний простір.
Наприклад, з 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)
Наприклад, якщо є піксель у col = 10, рядок = 22, то реальними координатами до піксельного центру є:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Щось подібне можна приготувати для PostGIS за допомогою ST_Affine () .
Світовий файл (.tfw), що супроводжує GeoTIFF, містить: