REMOTE SENSING

QGIS 3.4 Orfeo ToolBox(OTB) - (7) 파이썬 콘솔에서 레이어 추가하기

유병혁 2019. 1. 14. 10:43

안녕하세요? 이번 글은 QGIS 3.4 파이썬 콘솔에서 레이어를 추가해 보겠습니다.

PyQGIS(Python과 QGIS의 조합)의 첫 걸음으로 볼 수 있겠죠?!


먼저, '플러그인 > 파이썬 콘솔'을 실행합니다.


QGIS 하단에 아래와 같이 '파이썬 콘솔' 창이 실행됩니다.


파이썬 IDE에 익숙하신 분들은 '편집기 보이기' 창을 클릭하시면,


다음과 같이 좌측은 콘솔, 우측은 편집기 상태로 화면이 설정됩니다.


'Options' 버튼을 누르시면 '파이썬 콘솔 설정' 창이 실행되는데요,


화면 좌측과 같이 '콘솔', '편집기' 각각 설정이 분리되어 있습니다.


예를 들어, 콘솔과 편집기의 글꼴을 변경하고자 하시면, 각각의 설정을 변경해주셔야 합니다. 여기서는 글꼴을 Arial로 변경해 보겠습니다.

 


아래와 같이 콘솔과 편집기의 기존 글꼴이 Arial로 변경되었습니다.


편집기에서 '저장' 버튼을 누르고,


파이썬 코드를 저장할 파일을 설정하도록 하겠습니다. 여기서는 'qgis3_addlayers.py'로 정의하였습니다.


자, 벡터 레이어를 추가해볼까요?! 실습을 위한 소스는 KDPA 데이터를 사용하겠습니다.

KDPA(한국보호지역 통합DB관리 시스템)에서 국립공원 SHP 파일 다운로드 | http://blog.daum.net/geoscience/1239


KDPA 데이터를 다운로드 받고 데이터소스 관리자를 통해 레이어를 추가해 봅니다.

※ KDPA 데이터는 인코딩을 UTF-8로 설정해주셔야 합니다.


아래와 같이 레이어가 추가되었는데요, 여기서 일부 피처만 선택해서 사용하겠습니다.


아래와 같은 속성 테이블에서,


'표현식을 이용해 객체 선택'을 클릭하고,


아래 표현식을 통해 소백산 주목군락(천연기념물 제244호) 피처를 선택합니다.


아래 피처가 해당되는데요,


레이어 명을 우클릭하고 '내보내기 > 선택한 객체를 다른 이름으로 저장'을 클릭해서,


SOBAEK_YEWS.shp이라는 이름으로 저장해 보겠습니다.


자, 이제 한 개 피처로 구성된 벡터 레이어를 생성했습니다.


자,  이제 본격적으로 파이썬 콘솔을 사용해 보겠습니다. QGIS 3.4 파이썬 콘솔은 시작할 때

qgis.core와 qgis.gui 모듈을 자동으로 불러옵니다. 따라서 QGIS API를 바로 호출하실 수 있습니다.

1
2
3
4
# 벡터 레이어 추가
yews = QgsVectorLayer('D:/GEODATA/SOBAEK_YEWS.shp''Sobaek Yews''ogr')
if yews.isValid():
    QgsProject.instance().addMapLayer(yews)
cs


작성한 스크립트 실행은 아래 아이콘을 클릭하면 됩니다.


아래와 같이 벡터 레이어가 추가되었습니다 아래처럼 코드 한 줄로 간결하게 표현할 수도 있습니다.

1
yews = iface.addVectorLayer('D:/GEODATA/SOBAEK_YEWS.shp''Sobaek Yews''ogr')
cs


QGIS는 벡터 레이어를 불러올때 Single symbol과 임의의 색상을 이용하여 표현합니다.

만약 고정된 레이어 색상을 적용하고자 하시면, 아래와 같이 코드를 추가하시면 됩니다.

1
2
3
4
# 기호 설정
renderer = yews.renderer()
symbol = renderer.symbol()
symbol.setColor(QColor('#33a02c'))
cs


QColor 객체는 색상 명칭으로도 생성하실 수 있는데요, 색상 명칭은 아래와 같이 확인 후 적용하실 수 있습니다.

1
2
3
# 색상 확인
QColor().colorNames()
symbol.setColor(QColor('greenyellow'))
cs


이제 아래 코드까지 추가하시면 이제 지정한 색상으로 레이어가 표현됩니다. 간단하죠?!

1
yews.triggerRepaint()
cs


그런데 레이어 색상은 변경되었지만 범례는 여전히 임의 색상이 적용되고 있습니다. 이건 고쳐야겠죠?!


아래와 같이 코드를 추가해주시면 되겠습니다.

1
iface.layerTreeView().refreshLayerSymbology(yews.id())
cs


이번에는 레스터 레이어를 추가해 보겠습니다. 방식은 벡터 레이어와 추가와 거의 동일합니다.

여기서는 해당 지역을 촬영한 드론 정사영상(OpenDroneMap/WebODM으로 처리)을 사용하였습니다.

1
2
3
4
5
6
7
# 래스터 레이어 추가
'''
yews_orph = QgsRasterLayer('D:/GEODATA/SOBAEK_YEWS_ORPH.tif', 'Sobaek Yews Orthophoto')
if yews_orph.isValid():
    QgsProject.instance().addMapLayer(yews_orph)
'''
yews_orph = iface.addRasterLayer('D:/GEODATA/SOBAEK_YEWS_ORPH.tif''Sobaek Yews Orthophoto')
cs

이상으로 파이썬 콘솔에서 벡터/래스터 레이어를 추가해 봤습니다.