Перше, що потрібно зробити - це визначити прямокутник, що перекривається, в геопросторових координатах. Для цього ви отримуєте геотрансформацію для кожного вихідного зображення:
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])
(що , ймовірно, переверніть один з растрів по діагоналі)?