안녕하세요? 이번 글은 파이썬 콘솔에서 GDAL 래스터 계산기를 구동해 보도록 하겠습니다.
QGIS 파이썬 환경을 PyQGIS라고 하는데요, 상단 메뉴에서 '플러그인 > 파이썬 콘솔'을 실행하시면 됩니다.
파이썬 콘솔 창은 아래와 같습니다.
파이썬 콘솔에서 다음과 같이 입력하면 파이썬 버전을 확인할 수 있는데요, QGIS 3.4는 파이썬 3.7.0을 쓰고 있습니다.
1 2 | import sys print(sys.version) | cs |
GDAL 래스터 계산기는 공간처리 툴박스의 'GDAL > 래스터 계산기'에 위치해 있습니다.
GDAL 래스터 계산기 창은 아래와 같습니다. 이 창의 각 파라미터를 파이썬 콘솔에서 제어해 주시면 되겠습니다.
실습을 위해 소백산국립공원 비로봉 주목군락지 일대의 무인기 영상을 하나 추가했습니다.
참고로, 다음 구문을 입력하시면 GDAL 래스터 계산기 구동을 위한 도움말을 얻으실 수 있습니다.
1 | processing.algorithmHelp('gdal:rastercalculator') | cs |
먼저, 입력 레이어(input layer)를 지정해 줍니다. 여기서는 무인기 영상을 지정해주면 되겠죠?!
1 2 3 | import os os.chdir('D:\GEODATA') input_layer = QgsRasterLayer('odm_orthophoto.tif', 'raster') | cs |
입력 레이어는 다수의 래스터 밴드로 구성되어 있습니다. RGB 무인기 영상은 4개 밴드로 구성되어 있는데요,
래스터 계산기의 변수 A에 대한 래스터 밴드 번호를 지정해 줍니다. 여기서는 밴드 1 (Red)로 지정해 주겠습니다.
1 | parameters = {'INPUT_A': input_layer, 'BAND_A': 1, | cs |
여기서는 변수 A부터 C까지 각각 무인기 영상의 1번(Red), 2번(Green), 3번 밴드(Blue)로 지정해 주었습니다.
실제 래스터 계산기에서는 다수의 입력 레이어를 사용할 수 있으며 변수는 A부터 F까지 선언하실 수 있습니다.
1 2 3 | parameters = {'INPUT_A': input_layer, 'BAND_A': 1, 'INPUT_B': input_layer, 'BAND_B': 2, 'INPUT_C': input_layer, 'BAND_C': 3, | cs |
다음은 래스터 계산식인데요, 저는 무인기 영상의 초과녹색지수(Excess Green Index: ExG)를 계산해 봤습니다.
1 | 'FORMULA': '2 * (B/(A+B+C)) - (A/(A+B+C)) - (C/(A+B+C))', | cs |
다음은 산출물의 NODATA 값 설정인데요, 0으로 지정해 주겠습니다.
1 | 'NO_DATA': 0, | cs |
출력 래스터 형식은 콤보박스에서 원하는 유형을 지정해 주시면 됩니다.
아래와 같이 다양한데요,
각각의 파라미터 유형을 어떻게 지정할 지는 도움말을 참조하시면 되겠습니다. 저는 Float32를 선택했습니다.
1 | 'RTYPE': 5, | cs |
이제 래스터 계산기 결과값이 저장될 파일을 선언해 주시면 되겠습니다. 결과를 확인해 볼까요?!
1 | 'OUTPUT' : 'ExG.tif'} | cs |
지금까지 작성된 아래 코드를 파이썬 콘솔에 입력하시면 자동 실행됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import sys print(sys.version) processing.algorithmHelp('gdal:rastercalculator') import os os.chdir('D:\GEODATA') input_layer = QgsRasterLayer('odm_orthophoto.tif', 'raster') parameters = {'INPUT_A': input_layer, 'BAND_A': 1, 'INPUT_B': input_layer, 'BAND_B': 2, 'INPUT_C': input_layer, 'BAND_C': 3, 'FORMULA': '2 * (B/(A+B+C)) - (A/(A+B+C)) - (C/(A+B+C))', 'NO_DATA': 0, 'RTYPE': 5, 'OUTPUT' : 'ExG.tif'} processing.runAndLoadResults('gdal:rastercalculator', parameters) | cs |
아래와 같이 결과값이 자동적으로 레이어 추가되었습니다.
무인기 영상 내 고사목 영역을 확대해서 ExG 결과값을 확인해 보겠습니다.
고사목이나 시들음이 주변과 뚜렷히 대비된 효과를 확인할 수 있는데요, 값이 뭔가 이상합니다. 왜 그럴까요?!
확인해 보니 제가 사용한 무인기 영상이 Byte이기 때문인데요, 입력 레이어의 포맷 변경은 공간처리
툴박스에서 '래스터 변환 > 변환 (포맷 변경)'을 이용하시면 됩니다. ※ 간단한 내용이라 본 글에서 생략합니다.