La première chose à faire est de déterminer le rectangle qui se chevauche en coordonnées géospatiales. Pour ce faire, vous obtenez la géotransformation pour chaque image source:
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])]
Convertissez ensuite ce rectangle en pixels pour chaque image en soustrayant les coordonnées supérieure et gauche et en divisant par la taille des pixels, en arrondissant.
De là, vous pouvez appeler ReadRaster()
chaque image, en lui donnant les pixels que vous venez de calculer:
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>
)
Je suis un peu fatigué, donc si ça n'a pas beaucoup de sens, faites le moi savoir!
gt1[1]
etgt2[1]
(ougt1[5]
etgt2[5]
) ont des signes opposés? (Je pense que ce qui retournerait l'un des rasters verticalement ou horizontalement.) Ou siabs(gt1[2])
etabs(gt1[4])
sont plus grands queabs(gt1[1])
etabs(gt1[5])
maisabs(gt2[2])
etabs(gt2[4])
sont plus petits queabs(gt2[1])
etabs(gt2[5])
(ce qui retournerait probablement l'un des rasters en diagonale)?Le troisième élément d'intersection doit être min (r1 [2], r2 [2]):
De plus, je recommanderais une certaine logique pour vérifier que les jeux de données se croisent réellement.
Ceci est une approche:
la source