안녕하세요? 앞서 QGIS 파이썬 콘솔(PyQGIS)을 통해 MODIS 식생지수 EVI 한장을 처리했었는데요, 이번에는 여러 장을 한번에 처리하는 과정을 정리해 보겠습니다. 아래 2개 글의 과정을 여러 장에 반복적으로 적용해서 업무를 자동화하는 내용입니다.
1. PyQGIS: MODIS 식생지수(EVI) 데이터의 좌표계 변환 후 저장
2. PyQGIS: MODIS 식생지수(EVI) 데이터에 비례인자 적용 후 저장
여러 장의 MODIS 데이터는 스크립트를 통해 내려받으실 수 있는데요, 다음 링크 글에서 스크립트 사용법과 파일 다운로드까지 정리되어 있습니다(작성 글 마지막 단락에 파일 다운로드 링크).
이번 글에서 작성할 코드는 파일을 내려받으시면 됩니다. 자, 그럼 파일과 코드가 준비되었으니 시작해볼까요?!
현재 제 컴퓨터에는 'D:\GEODATA' 폴더 내에는 아래와 같이 파일들이 위치하고 있습니다.
inputRaster 폴더 내에는 아래와 같이 MODIS *.hdf 파일 20장이 위치하고 있습니다.
이걸 처리한 결과값을 outputRaster 폴더에 담고자 합니다. QGIS를 실행해 볼까요?!
QGIS에서 '플러그인 > 파이썬 콘솔'을 실행합니다.
파이썬 콘솔 패널에서 '편집기 보이기' 버튼을 클릭합니다.
아래와 같이 파이썬 콘솔 패널의 좌, 우측이 구분되는데요,
'스크립트 열기' 버튼을 클릭하고,
내려받은 *.py 파일을 불러옵니다. 참고로 '_PA'는 'Process Automation'의 의미로 붙였습니다.
*코드내용은 다음과 같습니다.
# 모듈 불러오기
import gdal, os
# 디렉터리 내의 모든 파일 목록
os.chdir('D:\\GEODATA\\inputRaster')
rasterFiles = os.listdir(os.getcwd())
# 여러 장 한번에 처리하기 반복
for i in range(len(rasterFiles)):
# i번째 hdf 파일 열기
os.chdir('D:\\GEODATA\\inputRaster')
hdfLayer = gdal.Open(rasterFiles[i], gdal.GA_ReadOnly)
# EVI 래스터 레이어 열기
rLayer = gdal.Open(hdfLayer.GetSubDatasets()[1][0], gdal.GA_ReadOnly)
# EVI 래스터 출력 위치/이름 지정
outputName = rLayer.GetMetadata_Dict()['LOCALGRANULEID'][:-4]+'_EVI.tif'
outputRaster = '..\\outputRaster\\'+ outputName
# 워프(재투영)
gdal.Warp(outputRaster, rLayer, dstSRS='EPSG:4326')
# EVI 워프(재투영)래스터 레이어 열기
os.chdir('D:\\GEODATA\\outputRaster')
input_layer = QgsRasterLayer(outputName, 'raster')
parameters = {'INPUT_A': input_layer, 'BAND_A': 1, # 래스터 밴드
'FORMULA': 'A * 0.0001', # 래스터계산식
'RTYPE': 5, # 출력 래스터 유형은 Float32
'OUTPUT' : rasterFiles[i][:-4] + '_SF.tif'}
# 래스터 계산기 실행
processing.runAndLoadResults('gdal:rastercalculator', parameters)
이제 해당 코드가 추가되었는데요,
'스크립트 실행' 버튼을 클릭하면, inputRaster 폴더 내에 위치한 *.hdf 파일에 반복적으로 작업이 수행됩니다.
실행 결과는 다음과 같습니다. 이제 여러 장을 한번에 처리할 수 있겠죠?!