Tôi muốn lưu trữ pixel tệp GeoTIFF theo pixel trong cơ sở dữ liệu. Tôi cần lưu trữ các giá trị pixel cùng với lat / lon của pixel đó trên hình ảnh GeoTIFF. Có thể làm điều đó?
Tôi muốn lưu trữ pixel tệp GeoTIFF theo pixel trong cơ sở dữ liệu. Tôi cần lưu trữ các giá trị pixel cùng với lat / lon của pixel đó trên hình ảnh GeoTIFF. Có thể làm điều đó?
Câu trả lời:
Theo nghĩa chung, sử dụng các tham số biến đổi affine , có sẵn với bất kỳ định dạng tệp raster nào. Với GDAL, tính năng này khả dụng với hàm GetGeoTransform () hoặc PostGIS ' ST_GeoReference () . Sau khi tìm thấy sáu tham số này, người ta chỉ cần xác định chúng là tham số nào, sau đó một hàm có thể được thực hiện để biến đổi trong không gian tuyến tính.
Ví dụ: với 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)
Ví dụ: nếu có một pixel tại col = 10, row = 22, thì tọa độ trong thế giới thực đến trung tâm pixel là:
>>> pixel2coord(10, 22)
(2780000.0, 6162300.0)
Một cái gì đó tương tự có thể được nấu cho PostGIS với ST_Affine () .
Tệp thế giới (.tfw) đi kèm với GeoTIFF chứa: