GDAL에 다른 크기의 래스터를 추가하여 결과가 교차 지역에만있는 방법


11

두 개의 래스터를 추가하고 단일 래스터 출력을 생성하는 Python 메소드를 작성 중입니다. 내가 통제 할 수없는 이유로 인해 입력 래스터의 범위는 다르지만 겹칩니다.

출력 래스터 범위가 두 입력의 교차 영역 만되도록 출력을 생성하기 위해 2 개의 겹친 영역에 겹치는 입력 래스터 픽셀에 대해 독점적으로 작동 할 수 있습니까?

답변:


12

가장 먼저해야 할 일은 지리 공간 좌표에서 겹치는 사각형을 결정하는 것입니다. 이를 위해 각 소스 이미지에 대한 지리 변환을 얻습니다.

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])(아마 대각선 래스터 중 하나를 뒤집어 것이다)?
das-g

6

교차의 세 번째 요소는 min (r1 [2], r2 [2]) 여야합니다.

intersection = [max(r1[0], r2[0]), min(r1[1], r2[1]), min(r1[2], r2[2]), max(r1[3], r2[3])]

또한 데이터 세트가 실제로 교차하는지 확인하는 논리를 권장합니다.

이것은 하나의 접근법입니다.

if (intersection[2] < intersection[0]) or (intersection[1] < intersection[3]):
    intersection = None
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.