GIS

QGIS 파이썬 콘솔에서 벡터 레이어 제어하기

유병혁 2015. 1. 22. 10:15

QGIS 파이썬 콘솔에서 벡터 레이어를 제어하는 방법을 학습해 보도록 하겠습니다.

출처: http://www.qgistutorials.com/en/docs/getting_started_with_pyqgis.html

 

먼저, 실습을 위해 국립공원 문화자원 벡터 레이어를 아래와 같이 추가해 보도록 하겠습니다.

이 데이터는 공공데이터 포털에서 조회하시고 바로 받아보실 수 있습니다.

 

공공데이터포털에서 국립공원 공간데이터 다운로드 방법
http://blog.daum.net/geoscience/737

 

아래와 같이 포인트 타입의 벡터 레이어를 추가하고, 상단 메뉴에서 '플러그인 > Python 콘솔'을 실행시키겠습니다.

 

먼저, 현재 활성화된 레이어를 layer라고 정의해 보겠습니다.

layer = iface.activeLayer()

 

여기서 iface는 QgisInterface 클래스(Class)의 객체(Object)입니다.

클래스, 객체는 모두 객체 지향 프로그래밍(Object-based Programming)의 개념인데요, 아래 글을 참고하시기 바랍니다.

 

객체 지향 프로그래밍 | 출처: 위키백과
http://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

QgisInterface 클래스의 구조는 아래 글을 참조하시기 바랍니다.

http://qgis.org/api/2.6/classQgisInterface.html

 

이번에는 layer 객체가 가지고 있는 속성(attribute)을 살펴보도록 하겠습니다.

dir(layer)

https://docs.python.org/2.7/library/functions.html?highlight=dir#dir

 

dir()은 파이썬에서 import 명령 없이 바로 사용할 수 있는 내장 함수(Builit-in Function)입니다.

참고로, 파이썬 2.7 버전의 내장 함수 목록은 아래와 같습니다.

https://docs.python.org/2/library/functions.html

 

앞서 소개드린 코딩 2줄을 실행한 결과입니다.

현재 선택된 레이어를 layer로 지정하고, layer의 속성 목록을 살펴봤습니다.

 

이번에는 벡터 레이어의 각 포인트 피처들을 반복문을 통해 접근해 보도록 하겠습니다.

파이썬의 for문과 print함수를 이용하는데요, 결과는 아래와 같습니다.

 

파이썬 for문

https://docs.python.org/2/tutorial/controlflow.html

파이썬 print 함수

https://docs.python.org/2/whatsnew/2.6.html#pep-3105-print-as-a-function

 

getFeatures는 QgsVectorLayer 클래스의 함수입니다.

http://qgis.org/api/classQgsVectorLayer.html

 

이제 벡터 레이어의 각 피처에 접근할 수 있게 되었는데요,

이번에는 각 피처의 속성에서 특정 필드값들을 조회해 보도록 하겠습니다.

문화자원 벅터 레이어 중 자원명(KOR_NM)과 지구명(DSTRC_NM) 필드를 출력해 보겠습니다.

 

아래와 같이 print 함수를 변경하여 원하는 필드값을 출력하였습니다.

 

이번에는 좌표값을 출력해 보도록 하겠습니다.

 

위도, 경도 중 하나만 적용하는 방법은 아래와 같습니다. 간단하죠?!

 

'콘솔 지우기' 버튼을 누르고,

 

이번에는 필드값과 좌표값을 한 번에 출력해 보도록 하겠습니다.

 

앞서 조회된 결과를 파이썬 내장 함수 open을 이용하여 별도 txt 파일로 추출해 보겠습니다.

파이썬의 인코딩(encoding)과 관련해서는 아래 글을 참조하시기 바랍니다.

https://docs.python.org/2/library/codecs.html#codecs.IncrementalEncoder

 

텍스트 파일을 열어본 결과입니다.