GIS

PyQGIS: MODIS 식생지수(EVI) 데이터의 좌표계 변환 후 저장

유병혁 2021. 1. 11. 03:10

안녕하세요? 이번 글은 QGIS 파이썬 콘솔(PyQGIS)를 통해 MODIS 식생지수(EVI) 데이터의 좌표계를 변환 후 GeoTIFF 형식으로 저장해 보겠습니다. QGIS에서 MODIS 식생지수 데이터를 처리하는 일련의 과정을 파이썬으로 자동화하는 과정 중 일부입니다.. 이전 글은 아래 링크를 참조하시면 됩니다.

 

MODIS 식생지수(EVI) 데이터 처리 및 통계

안녕하세요? 이번 글은 MODIS 식생지수 중 EVI 데이터를 처리한 후, 구역 통계를 계산하는 과정을 정리해 보겠습니다. 이전 글은 아래 링크를 참조하시기 바랍니다. MODIS 식생지수 (MOD13Q1) 데이터 다

blog.daum.net

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로 '래스터 계산기'를 구동해 보겠습니다.