안녕하세요? 이번 글은 QGIS 파이썬 콘솔(PyQGIS)를 통해 MODIS 식생지수(EVI) 데이터의 좌표계를 변환 후 GeoTIFF 형식으로 저장해 보겠습니다. QGIS에서 MODIS 식생지수 데이터를 처리하는 일련의 과정을 파이썬으로 자동화하는 과정 중 일부입니다.. 이전 글은 아래 링크를 참조하시면 됩니다.
QGIS를 실행하고 상단 메뉴에서 '플러그인 > 파이썬 콘솔'을 실행합니다.
일단, 기능구현에 필요한 모듈을 불러오겠습니다. GDAL과 OS 모듈을 호출합니다.
GDAL 라이브러리(Python API): gdal.org/index.html
Python 운영 체제 인터페이스(os 모듈): docs.python.org/ko/3/tutorial/stdlib.html
# 모듈 불러오기
import gdal, os
앞서 내려받은 netCDF4 데이터가 위치한 디렉터리로 위치를 변경합니다.
inputRaster, outputRaster 폴더를 생성한 후 inputRaster에 복사했습니다.
# 디렉터리 위치 변경
os.getcwd()
os.chdir('D:\\GEODATA\\inputRaster')
디렉터리 내의 모든 파일 목록을 확인해 봅니다. 해당 디렉터리 내 파일이 인식될 것입니다(rasterFiles[0]은 첫번째 파일).
# 디렉터리 내의 모든 파일 목록
rasterFiles = os.listdir(os.getcwd())
print(rasterFiles)
print(rasterFiles[0])
0번째 hdf 파일을 hdfLayer라는 변수로 선언합니다.
# 0번째 hdf 파일 열기
hdfLayer = gdal.Open(rasterFiles[0], gdal.GA_ReadOnly)
해당 레이어의 서브데이터셋을 확인합니다. EVI 레이어의 레이어 ID는 1입니다.
GetSubDatasets()[1]에서 [0]은 이름을, [1]은 설명을 지칭합니다.
# 서브데이터셋
hdfLayer.GetSubDatasets()
hdfLayer.GetSubDatasets()[1][0] # 서브데이터셋(EVI) 이름
hdfLayer.GetSubDatasets()[1][1] # 서브데이터셋(EVI) 설명
EVI 래스터 레이어를 열어봅니다.
# EVI 래스터 레이어 열기
rLayer = gdal.Open(hdfLayer.GetSubDatasets()[1][0], gdal.GA_ReadOnly)
rLayer.GetMetadata_Dict()['LOCALGRANULEID']
EVI 래스터 출력 위치와 이름을 아래와 같이 지정합니다.
# EVI 래스터 출력 위치/이름 지정
rLayer.GetMetadata_Dict()['LOCALGRANULEID'][:-4]
outputName = rLayer.GetMetadata_Dict()['LOCALGRANULEID'][:-4]+'_EVI.tif'
outputRaster = '..\\outputRaster\\'+ outputName
QGIS 워프(재투영) 기능을 실행하고 대상 좌표계(dstSRS)는 EPSG:4326으로 선언합니다.
# 워프(재투영)
gdal.Warp(outputRaster, rLayer, dstSRS='EPSG:4326')
해당 래스터 레이어를 추가합니다.
# 래스터 레이어 추가
iface.addRasterLayer(outputRaster, outputName)
결과는 아래와 같습니다. 다음 글은 PyQGIS로 '래스터 계산기'를 구동해 보겠습니다.