สิ่งแรกที่ต้องทำคือการกำหนดสี่เหลี่ยมผืนผ้าที่ทับซ้อนกันในพิกัดเชิงพื้นที่ ในการทำเช่นนี้คุณจะได้รับ geotransform สำหรับแต่ละอิมเมจต้นฉบับ:
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])
(ซึ่งอาจจะพลิกหนึ่งในแนวทแยงมุมแนวทแยงมุม)?