像素/阵列位置到长gdal Python

时间:2018-09-21 12:34:47

标签: python coordinates pixel raster gdal

我正在尝试将表示.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))

2 个答案:

答案 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

这两个函数分别返回像素和坐标的元组。