如何找到GeoTIFF文件中每个像素的经/纬度值?


9

我想在数据库中逐像素存储GeoTIFF文件。我需要在GeoTIFF图像上存储像素值以及该像素的纬度/经度。有可能这样做吗?


1
目标是能够按纬度/经度查询吗?您可以使用geotransform属性使用GDAL完成此操作-我可以提供一个python示例。转换可以预渲染为2频段的Geotiff(Band1-LAT,Band2-LON),但我想知道这样做是否会更有效。我想用例会有所帮助。
杰伊·劳拉

Answers:


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)

可以使用ST_Affine()为PostGIS 编写类似的内容。


1

这可能有点陈旧:将像素转换为点,添加lat和long字段,并填充lat和long值。


0

GeoTIFF随附的世界文件(.tfw)包含:

  • x方向(和y方向)上的像素大小,以地图单位/像素为单位,
  • 左上像素中心的x坐标(和y坐标)。这就是您需要计算每个像素的纬度/经度位置的全部。

2
除了您要描述的内容之外,您至少还需要了解坐标系!(世界文件不包含此类信息。)
ub

1
另外,并非每个GeoTIFF都包含一个世界文件。甲真正的GeoTIFF具有存储在头部,而不是在一个单独的文件中的坐标信息。但是,术语“ GeoTIFF”通常用于带有世界文件的TIFF图像。关键是,不会总是有TFW。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.