我正在尝试将表示.tif的栅格中的位置转换为相应的全局坐标。将整个数组转换为tif并将其加载到QGIS可以很好地引用所有内容,但是使用以下针对单点的计算方法,会有一点偏移(在所得坐标中向东-东-北-东。...
raster.tif使用ETRS 89 UTM区域32N
有人有主意吗?
from osgeo import ogr, gdal, osr
import numpy as np
raster = gdal.Open("rasters/raster.tif")
raster_array = np.array(raster.ReadAsArray())
def pixel2coord(x, y):
xoff, a, b, yoff, d, e = raster.GetGeoTransform()
xp = a * x + b * y + xoff
yp = d * x + e * y + yoff
return(xp, yp)
print(pixel2cood(500,598))
答案 0 :(得分:1)
我认为问题可能在于xoff和yoff包含最左上角像素的左上角的坐标,并且您需要计算像素中心的坐标。
def pixel2coord(x, y):
xoff, a, b, yoff, d, e = raster.GetGeoTransform()
xp = a * x + b * y + a * 0.5 + b * 0.5 + xoff
yp = d * x + e * y + d * 0.5 + e * 0.5 + yoff
return(xp, yp)
答案 1 :(得分:0)
没有理由手动执行此操作。您只需要安装rasterio,这是一个基于GDAL和numpy的python库。即使图像有偏移/旋转,光栅也会照顾好它。
您只需要做:
import rasterio
with rasterio.open('rasters/raster.tif') as map_layer:
coords2pixels = map_layer.index(235059.32,810006.31) #input lon,lat
pixels2coords = map_layer.xy(500,598) #input px, py
这两个函数分别返回像素和坐标的元组。