Answers:
首先要做的是确定地理空间坐标中的重叠矩形。为此,您需要获取每个源图像的地理转换:
gt1 = ds1.GetGeoTransform()
# r1 has left, top, right, bottom of dataset's bounds in geospatial coordinates.
r1 = [gt1[0], gt1[3], gt1[0] + (gt1[1] * ds1.RasterXSize), gt1[3] + (gt1[5] * ds1.RasterYSize)]
# Do the same for dataset 2 ...
intersection = [max(r1[0], r2[0]), min(r1[1], r2[1]), min(r1[2], r2[2]), max(r1[3], r2[3])]
然后,通过减去顶部和左侧坐标并除以像素大小,将该矩形转换为每个图像的像素,然后四舍五入。
在这里,您可以调用ReadRaster()
每个图像,为其提供刚刚计算出的像素范围:
band.ReadRaster(px1[0], px1[1], px1[2] - px1[0], px1[3] - px1[1], px1[2] - px1[0], px1[3] - px1[1],
# <band's datatype here>
)
我有点累,所以如果这没有什么意义,请告诉我!
gt1[1]
和gt2[1]
(或gt1[5]
和gt2[5]
)具有相反的符号,这是否也有效?(这将翻转栅格的一个垂直或水平,我想。)或者,如果abs(gt1[2])
和abs(gt1[4])
比也大abs(gt1[1])
和abs(gt1[5])
,但abs(gt2[2])
和abs(gt2[4])
比小abs(gt2[1])
和abs(gt2[5])
(这可能会翻转栅格的一个对角线)?