REMOTE SENSING

QGIS 파이썬 콘솔을 이용하여 래스터 색상표(color ramp) 적용하기

유병혁 2017. 6. 21. 10:36

이번 글에서는 QGIS 파이썬 콘솔을 이용하여 래스터 색상표(color ramp)를 적용해 보도록 하겠습니다.

QGIS에서 파이썬으로 처리한 래스터를 원하는 색상표를 적용하여 레이어 목록에 추가해보고자 합니다.


실습에 사용할 데이터는 이전 블로그 글을 참고하시기 바랍니다.

QGIS 파이썬 콘솔을 이용하여 래스터 영상 병합하기 | http://blog.daum.net/geoscience/1101


또한, 저는 현재 QGIS 2.14를 사용 중이기 때문에 아래 QGIS API 문서를 참고하였습니다. 

QGIS API Documentation  2.14.0-Essen | http://qgis.org/api/2.14/


자, 먼저 래스터 데이터를 하나 추가해 보겠습니다.

# 소스 파일과 레이어 이름 정의
srcFile = "D:/PROBA-V_1km/PROBA-V_1km_20160101.tif" # source file
lyrName = "20160101" # layer name
# 레이어 생성
from qgis.core import QgsRasterLayer
rasterLyr = QgsRasterLayer(srcFile, lyrName)
# 목록에 레이어 추가
# QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])



해당 래스터의 레이어 속성을 열어본 화면인데요, 여기서 색상 보간, 색상표, 렌더 유형과 같은 설정을 파이썬 프로그래밍으로 처리하고자 합니다.


먼저, 아래 색상 보간을 선형으로 설정해 보겠습니다.


# QgsColorRampShader Class Reference
# http://qgis.org/api/2.14/classQgsColorRampShader.html#details
# 색상 보간 선택: 선형(INTERPOLATED), 이산(DISCRETE), 엄밀(EXACT)
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.INTERPOLATED)

색상 보간을 설정하는 클래스 참조는 아래와 같습니다.

QgsColorRampShader Class Reference | http://qgis.org/api/2.14/classQgsColorRampShader.html#details


이번에는 색상표를 설정해 보겠습니다.

저는 현재 프로바브이(PROBA-V) 위성의 정규식생지수(NDVI) 영상을 사용 중입니다.

따라서, 정규식생지수가 보다 시각적으로 표현될 수 있도록 사용자 색상표를 만들어 보겠습니다.


아래는 NDVI 색상표의 값, 색상, 라벨값을 지정하는 코드입니다.

# NDVI 색상표: 값, 색상, 라벨 값 추가
from PyQt4 import QtGui
i = []
i.append(QgsColorRampShader.ColorRampItem(0.00, QtGui.QColor('#000000'), '0'))
i.append(QgsColorRampShader.ColorRampItem(0.03, QtGui.QColor('#ffffff'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.06, QtGui.QColor('#c4baa4'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.10, QtGui.QColor('#b4966c'), '0.1'))
i.append(QgsColorRampShader.ColorRampItem(0.13, QtGui.QColor('#a4824c'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.16, QtGui.QColor('#94723c'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.20, QtGui.QColor('#7c9e2c'), '0.2'))
i.append(QgsColorRampShader.ColorRampItem(0.25, QtGui.QColor('#94b614'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.30, QtGui.QColor('#74aa04'), '0.3'))
i.append(QgsColorRampShader.ColorRampItem(0.35, QtGui.QColor('#64a204'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.40, QtGui.QColor('#549604'), '0.4'))
i.append(QgsColorRampShader.ColorRampItem(0.45, QtGui.QColor('#3c8604'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.50, QtGui.QColor('#1c7204'), '0.5'))
i.append(QgsColorRampShader.ColorRampItem(0.60, QtGui.QColor('#045e04'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.70, QtGui.QColor('#044204'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.80, QtGui.QColor('#043a04'), ''))
i.append(QgsColorRampShader.ColorRampItem(0.90, QtGui.QColor('#042604'), '0.9'))
i.append(QgsColorRampShader.ColorRampItem(1.00, QtGui.QColor('#041204'), ''))
c.setColorRampItemList(i)
s = QgsRasterShader()
s.setRasterShaderFunction(c)


렌더  유형에서 '단일 밴드 가상색채'를 지시하는 클래스 참조는 아래와 같습니다.

QgsSingleBandPseudoColorRenderer Class Reference | http://qgis.org/api/2.14/classQgsSingleBandPseudoColorRenderer.html


이제 목록에 NDVI 색상표가 적용된 레이어를 추가해볼까요?!


# 랜더(Render) 유형: 단일 밴드 가상색채
# QgsSingleBandPseudoColorRenderer Class Reference
# http://qgis.org/api/2.14/classQgsSingleBandPseudoColorRenderer.html
ps = QgsSingleBandPseudoColorRenderer(rasterLyr.dataProvider(), 1, s)
rasterLyr.setRenderer(ps)
# 목록에 레이어 추가
QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])

추가된 레이어의 속성을 보시면 의도된 대로 반영된 것을 보실 수 있습니다.