La prima cosa da fare è determinare il rettangolo sovrapposto in coordinate geospaziali. Per fare ciò, ottieni la geotrasformazione per ogni immagine sorgente:
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])]
Quindi converti quel rettangolo in pixel per ogni immagine sottraendo le coordinate superiore e sinistra e dividendole per la dimensione dei pixel, arrotondando per eccesso.
Da qui puoi chiamare ReadRaster()
ogni immagine, dandogli le estensioni in pixel che hai appena calcolato:
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>
)
Sono un po 'stanco, quindi se questo non ha molto senso, fammi sapere!
gt1[1]
egt2[1]
(ogt1[5]
egt2[5]
) hanno segni opposti? (Quale potrebbe capovolgere uno dei raster in verticale o in orizzontale, credo.) Oppure seabs(gt1[2])
eabs(gt1[4])
sono maggiori diabs(gt1[1])
eabs(gt1[5])
maabs(gt2[2])
eabs(gt2[4])
sono più piccoli diabs(gt2[1])
eabs(gt2[5])
(che probabilmente getterebbero uno dei raster in diagonale)?