Hal pertama yang harus dilakukan adalah menentukan persegi panjang yang tumpang tindih dalam koordinat geospasial. Untuk melakukan ini, Anda mendapatkan geotransform untuk setiap gambar sumber:
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])]
Kemudian konversi persegi panjang itu menjadi piksel untuk setiap gambar dengan mengurangi koordinat atas dan kiri dan membaginya dengan ukuran piksel, membulatkan ke atas.
Dari sini Anda dapat memanggil ReadRaster()
setiap gambar, memberikan luasan piksel yang baru saja Anda hitung:
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>
)
Saya sedikit lelah, jadi jika ini tidak masuk akal, beri tahu saya!
gt1[1]
dangt2[1]
(ataugt1[5]
dangt2[5]
) memiliki tanda-tanda yang berlawanan? (Yang akan membalik salah satu raster secara vertikal maupun horizontal, saya pikir.) Atau jikaabs(gt1[2])
danabs(gt1[4])
lebih besar dariabs(gt1[1])
danabs(gt1[5])
tapiabs(gt2[2])
danabs(gt2[4])
lebih kecil dariabs(gt2[1])
danabs(gt2[5])
(yang mungkin akan membalik salah satu raster diagonal)?Elemen ketiga persimpangan haruslah min (r1 [2], r2 [2]):
Juga, saya akan merekomendasikan beberapa logika untuk memeriksa apakah dataset benar-benar berpotongan.
Ini adalah salah satu pendekatan:
sumber