Saya ingin menyimpan file GeoTIFF piksel demi piksel dalam basis data. Saya perlu menyimpan nilai piksel bersama dengan lat / lon piksel itu pada gambar GeoTIFF. Apakah mungkin untuk melakukan itu?
Saya ingin menyimpan file GeoTIFF piksel demi piksel dalam basis data. Saya perlu menyimpan nilai piksel bersama dengan lat / lon piksel itu pada gambar GeoTIFF. Apakah mungkin untuk melakukan itu?
Jawaban:
Dalam arti umum, gunakan parameter affine transform , yang harus tersedia dengan format file raster. Dengan GDAL, ini tersedia dengan fungsi GetGeoTransform () , atau ST_GeoReference () PostGIS . Setelah menemukan enam parameter ini, satu hanya perlu menentukan yang mana mereka, kemudian fungsi dapat dibuat untuk mengubah dalam ruang linear.
Misalnya, dengan 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)
Misalnya, jika ada piksel pada col = 10, baris = 22, maka koordinat dunia nyata ke pusat piksel adalah:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Hal serupa dapat dibuat untuk PostGIS dengan ST_Affine () .
File dunia (.tfw) yang menyertai GeoTIFF berisi: