QGIS 기반 공간통계

대화상자에서 받은 인자를 사용해 통계 실행하기

이제 마지막 단계인 대화상자와 변수를 연결하는 부분이다.

지금까지 통계를 돌리기 위해 사용된 변수들은 전역변수 설정 부분에 정의되어 있었다.

이제 84~88행을 변경하여 대화상자에 입력된 값을 사용할 수 있게 해 보자.

84행의 FROM_DIST 변수의 값을 설정하는 부분을 self.dlg.from_lineEdit.text() 로 바꿔보자.

self.dlg 까지 타이핑하고 점(.)을 찍으면 이텔리 센스라는 기능을 통해 쓸 수 있는 인자들이 나오는데 이를 이용해 from_lineEdit를 쉽게 입력할 수 있다.

개발시 편집기로 아무 에디터나 사용할 수 있지만 PyCharm을 쓸 것을 권장하는 것은 이런 편리한 기능들을 이용하기 위해서이다.

from_lineEdit.text() 라는 코드는 대화상자의 from_lineTest 객체에서 사용자가 입력한 문자열을 가져오는 코드인데 이 값은 거리이기에 우리는 정수로 값을 받아야 한다.

때문에 최종적인 코드는 이를 int()로 둘러싸 다음과 같은 코드가 된다.

FROM_DIST = int(self.dlg.from_lineEdit.text())

 

아래 그림을 참조하여 84~88 행을 바꿔주자.

 

대화상자에 있던 UI 중 하나가 특이했던 것이 layer를 선택할 수 있는 Combo Box인데 여기에는 사용자 편의를 위해 미리 선택 가능한 레이어의 리스트를 채워 놓아야 한다.

다음 그림을 참고하여 75행 위치에 레이어 리스트를 채우는 코드를 만들어 보자. 참고로 self.iface.mapCanvas()를 하면 QGIS의 지도 객체를 받을 수 있고, 여기에 layers() 함수를 호출하면 레이어 리스트를 받을 수 있다.

 

그리고 사용자가 선택한 레이어를 분석에 사용할 수 있도록 105~108행을 다음 그림과 같이 변경해 보자. 참고로 문장의 압에 샵(#)을 붙이면 주석으로 처리되어 해석하지 않는 코드가 된다. 수정의 의미를 나중에도 알게 하기 위해 이전의 코드를 이렇게 주석 처리를 해 놓는 것도 때로는 바람직한 행동이다. 109 행에는 106~108 행 대신 사용자가 선택한 레이어를 받는 코드가 들어 있다.

 

이제 다시 플러그인을 재 로드후 실행해 주면 다시 대화상자가 나온다.

이번에는 무조건 [확인]을 누르지 말고, 아래 그림처럼 적절한 선택과 입력을 해 주고 [확인]을 누르자.

그러면 입력된 변수들을 바탕으로 분석이 수행되어 결과가 나오게 된다.

 

위에서 수정한 코드의 최종본은 다음 링크에 있으니 참조하시기 바란다.

https://gist.github.com/anonymous/1d59878309acf4d1cb3a

 

이렇게 손이 많이가는 UI와의 연결을 좀더 시간을 들여 해주면 아래 그림과 같이 팝업되는 대화상자가 아닌 위젯의 형태로 QGIS와 자연스럽게 통합되어 상호작용이 가능한 UI를 만들 수 있다.

댓글

댓글 본문
  1. 조경민
    Qgis에서 공간가중치행렬 만드는 방법 알수 있을까요?
  2. 장병진
    답변 늦어서 죄송합니다.
    위젯형태의 소스는 GeepsSpatialStatistic 이란 플러그인으로 개발되었고,
    소스는 다음 경로에 있습니다.
    https://github.com......tic
    감사합니다.
    대화보기
    • 이명휘
      QGIS 플러그인 만드는 법을 자세히 올려주셔서 감사합니다.
      저는 현재 QGIS를 공부하고 있는 학생입니다~
      혹시 마지막에 위젯형태로 구성된 부분좀 참고받을 수 있을까요?(소스코드)
    버전 관리
    BJ Jang
    현재 버전
    선택 버전
    graphittie 자세히 보기