pixel/array 经纬度 gdal 的位置 Python
pixel/array position to lat long gdal Python
我正在尝试将表示 .tif 的光栅中的位置转换为相应的全局坐标。将整个数组转换为 tif 并将其加载到 QGIS 一切都很好地引用,但是使用下面的单点计算方法有轻微的偏移(在结果坐标中向东北东....
raster.tif 使用 ETRS 89 UTM Zone 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))
我认为问题可能是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)
没有理由手动执行此操作。你只需要安装 rasterio,一个基于 GDAL 和 numpy 的 python 库。即使图像有 offset/rotation 光栅也会处理它。
您只需要做:
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
两个函数分别return像素和坐标的元组。
我正在尝试将表示 .tif 的光栅中的位置转换为相应的全局坐标。将整个数组转换为 tif 并将其加载到 QGIS 一切都很好地引用,但是使用下面的单点计算方法有轻微的偏移(在结果坐标中向东北东....
raster.tif 使用 ETRS 89 UTM Zone 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))
我认为问题可能是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)
没有理由手动执行此操作。你只需要安装 rasterio,一个基于 GDAL 和 numpy 的 python 库。即使图像有 offset/rotation 光栅也会处理它。
您只需要做:
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
两个函数分别return像素和坐标的元组。