Как найти значения широты / долготы для каждого пикселя в файле GeoTIFF?

9

Я хочу сохранить файл GeoTIFF попиксельно в базе данных. Мне нужно хранить значения пикселей вместе с широтой / долготой этого пикселя на изображении GeoTIFF. Возможно ли это сделать?

nehaarora
источник
1
Является ли целью возможность запроса по широте / долготе? Вы можете сделать это с помощью GDAL, используя атрибут geotransform - я могу привести пример на python. Преобразование может быть предварительно преобразовано в двухдиапазонный геотиф (Band1 - LAT, Band2 - LON), но мне интересно, не будет ли более эффективным сделать это на лету. Я думаю, вариант использования поможет.
Джей Лора

Ответы:

9

В общем смысле используйте параметры аффинного преобразования , которые должны быть доступны в любом формате растрового файла. В 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 () .

Майк Т
источник
1

Это может быть немного архаично: конвертировать пиксели в точки, добавлять поля lat и long и заполнять значениями lat и long.

gm70560
источник
0

Файл мира (.tfw), который сопровождает GeoTIFF, содержит:

  • размер пикселя в направлении х (и направлении у) в единицах карты / пиксель и
  • x-координата (и y-координата) центра верхнего левого пикселя. Это все, что вам нужно, чтобы рассчитать положение в широте / долготе каждого пикселя.
user15847
источник
2
В дополнение к тому, что вы описываете, как минимум, вам необходимо знать систему координат! (Мировой файл не содержит такой информации.)
whuber
1
Кроме того, не каждый GeoTIFF содержит файл мира. Истинная GeoTIFF содержит информацию координат , хранящейся в заголовке, а не в отдельном файле. Однако термин «GeoTIFF» часто применяется к изображениям TIFF с мировым файлом. Дело в том, что не всегда будет TFW.