Điều đầu tiên cần làm là xác định hình chữ nhật chồng chéo trong tọa độ không gian địa lý. Để làm điều này, bạn có được geotransform cho mỗi hình ảnh nguồn:
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])]
Sau đó chuyển đổi hình chữ nhật đó thành pixel cho mỗi hình ảnh bằng cách trừ tọa độ trên cùng và bên trái và chia cho kích thước pixel, làm tròn lên.
Từ đây, bạn có thể gọi ReadRaster()
trên mỗi hình ảnh, cung cấp cho nó mức độ pixel bạn vừa tính:
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>
)
Tôi hơi mệt, vì vậy nếu điều này không có ý nghĩa nhiều, hãy cho tôi biết!
gt1[1]
vàgt2[1]
(hoặcgt1[5]
vàgt2[5]
) có dấu hiệu trái ngược nhau? (Trong đó sẽ lật một trong những rasters theo chiều dọc hoặc chiều ngang, tôi nghĩ.) Hoặc nếuabs(gt1[2])
vàabs(gt1[4])
lớn hơnabs(gt1[1])
vàabs(gt1[5])
nhưngabs(gt2[2])
vàabs(gt2[4])
có kích thước nhỏ hơnabs(gt2[1])
vàabs(gt2[5])
(mà có lẽ sẽ lật một trong những rasters đường chéo)?