답변:
가장 먼저해야 할 일은 지리 공간 좌표에서 겹치는 사각형을 결정하는 것입니다. 이를 위해 각 소스 이미지에 대한 지리 변환을 얻습니다.
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])
(아마 대각선 래스터 중 하나를 뒤집어 것이다)?