Я хочу сохранить файл GeoTIFF попиксельно в базе данных. Мне нужно хранить значения пикселей вместе с широтой / долготой этого пикселя на изображении GeoTIFF. Возможно ли это сделать?
Я хочу сохранить файл GeoTIFF попиксельно в базе данных. Мне нужно хранить значения пикселей вместе с широтой / долготой этого пикселя на изображении 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, row = 22, то реальные координаты центра пикселя:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Нечто подобное можно приготовить для PostGIS с помощью ST_Affine () .
Файл мира (.tfw), который сопровождает GeoTIFF, содержит: