이전 강의에서 기본 액션에 대해 알았으니, 이제 여러분 자신의 액션을 정의해볼 차례입니다. 액션이란 피처를 클릭했을 때 일어나는 어떤 일을 말합니다. 액션으로 사용자 맵에 수많은 기능성을 추가할 수 있습니다. 예를 들자면 오브젝트에 대한 추가적인 정보를 얻을 수 있습니다. 액션을 할당함으로써 여러분의 맵에 완전히 새로운 차원을 추가할 수 있습니다!
이 강의의 목표: 사용자 지정 액션을 추가하는 방법을 배우기.
이전 강의에서 생성한 school_property 레이어를 사용합니다. 강의 자료에 여러분이 디지타이즈한 세 부지의 사진이 포함돼 있습니다. 다음 단계는 각 부지에 해당 이미지를 연계시키는 것입니다. 그 다음, 부지를 클릭하면 해당 부지의 사진을 나타내는 액션을 생성할 것입니다.
school_property 레이어의 속성에 이미지를 연계시킬 방법이 아직 없습니다. 먼저 이를 위한 항목을 생성하겠습니다.
Layer Properties 대화 창을 엽니다.
Fields 탭을 클릭합니다.
편집 모드를 엽니다.
다음 새 열을 추가합니다.
다음 값을 입력합니다.
항목을 생성한 다음, 새 항목 옆에 있는 Line edit 버튼을 클릭합니다.
다음과 같이 File name 에 대해 설정합니다.
Layer Properties 대화 창의 OK 를 클릭합니다.
Identify 도구를 사용해 school_property 레이어에 있는 세 피처 가운데 하나를 클릭합니다.
아직 편집 모드이므로, 다음과 같은 대화 창이 나타날 것입니다.
image 항목 옆의 ... 탐색 버튼을 클릭하십시오.
사용자 이미지가 있는 경로를 선택하십시오. 이미지들은 exercise_data/school_property_photos/ 경로에 있으며, 각각 연계되어야 할 피처와 동일한 명칭을 가지고 있습니다.
OK 를 클릭합니다.
이런 방법으로 모든 이미지들을 올바른 피처와 연계하십시오.
편집 내용을 저장하고 편집 모드를 끕니다.
school_property 레이어에 대한 Actions 서식을 엽니다.
Action properties 패널에 있는 Name 항목에 Show Image 라는 텍스트를 입력합니다.
다음 단계는 사용자의 OS에 따라 달라지므로, 다음 가운데 적합한 지침을 선택하십시오.
Type 드롭다운 메뉴를 클릭하고 Open 을 선택합니다.
Action 아래에 Gnome Image Viewer 를 위해 eog 를 입력하거나, ImageMagick 를 사용하려면 display 를 입력합니다. 명령어 뒤에 공백을 입력해야 한다는 점을 기억하십시오!
Type 드롭다운 메뉴를 클릭하고 Mac 을 선택합니다.
Action 아래에 open 이라고 입력하십시오. 명령어 뒤에 공백을 입력해야 합니다!
우리는 이미지를 열기를 원하고, QGIS는 이미지의 경로를 알고 있습니다. 이제 남은 것은 Action 에 이미지의 경로를 알려주는 일뿐입니다.
다음 목록에서 image 를 선택하십시오.
Insert field 항목을 클릭하십시오. QGIS가 Action 항목에 [% "image" %] 라는 문구를 추가할 것입니다.
Add to action list 버튼을 클릭합니다.
Layer Properties 대화 창의 OK 를 클릭합니다.
이제 새로 만든 액션을 테스트해봅시다.
맵을 보고 있다가 어떤 농장이 있는 지역에 대해 더 알고 싶어졌다고 해봅시다. 해당 지역에 대해 아무것도 모르고 있고, 그 지역에 대한 일반적인 정보를 찾고 싶다고 가정합시다. 지금 컴퓨터 앞에 앉아 있다는 점을 생각해보면 여러분이 처음 취할 행동은 아마도 해당 지역의 명칭을 구글해보는 것일 겁니다. 그러면 QGIS가 자동으로 그 액션을 취하도록 만들어볼까요!
landuse 레이어의 속성 테이블을 엽니다.
각 토지이용구역의 name 항목을 이용해서 구글 검색을 해보겠습니다.
속성 테이블을 닫습니다.
Layer Properties 의 Actions 로 돌아갑니다.
Action Properties ‣ Name 메뉴 항목에 Google Search 를 입력합니다.
다음 단계는 사용자의 OS에 따라 달라지므로, 다음 가운데 적합한 지침을 선택하십시오.
Type 아래에 있는 Open 을 선택하면, 윈도우에 인터넷 익스플로러 같은 기본 브라우저에서 인터넷 주소를 열도록 명령합니다.
Action 아래에 xdg-open 을 입력하면, 우분투에 크롬이나 파이어폭스 같은 기본 브라우저에서 인터넷 주소를 열도록 명령합니다.
Action 아래에 open 을 입력하면, MacOS에 사파리 같은 기본 브라우저에서 인터넷 주소를 열도록 명령합니다.
앞에 나열한 명령어 가운데 어떤 것을 이용하든, 이제 어떤 인터넷 주소를 열 것인지 알려줘야 합니다. 즉 구글 사이트로 가서 자동으로 지역명을 검색해야 합니다.
구글을 이용할 때는 보통 구글 검색란에 검색 문구를 입력합니다. 그러나 이 경우에는 컴퓨터가 자동으로 검색해야 합니다. 구글에 뭔가를 검색하라고 명령하는 방법은 (검색란을 직접 이용하지 않으려면) 인터넷 브라우저에 다음 http://www.google.com/search?q=SEARCH_PHRASE 라는 주소를 부여하는 것입니다. 이때 SEARCH_PHRASE 가 여러분이 검색하길 바라는 구문입니다. 아직 어떤 구문을 검색해야 하는지 모르기 때문에, (검색 구문 없이) 주소의 전반부만 입력하겠습니다.
Action 항목에 http://www.google.com/search?q= 라고 입력하십시오. 기존 명령어 뒤에 공백을 삽입한 다음 이 주소를 입력해야 합니다!
이제 여러분이 어떤 피처를 클릭하더라도 QGIS가 해당 피처의 name 값을 구글에서 검색하도록 브라우저에 명령해야 합니다.
name 항목을 선택합니다.
Insert field 를 클릭하면,
QGIS가 다음과 같이 구문을 추가할 것입니다.
다시 말해 QGIS가 브라우저를 열고 http://www.google.com/search?q=[% "name" %] 라는 주소를 전송하는 액션입니다. 그런데 [% "name" %] 라는 부분을 통해 QGIS가 검색 구문으로 name 항목의 내용을 보내게 하는 것입니다.
따라서 예를 들자면, 사용자가 클릭한 토지이용구역의 명칭이 Marloth Nature Reserve 라고 할 때 QGIS는 브라우저에 http://www.google.com/search?q=Marloth%20Nature%20Reserve 라는 주소를 보내게 되고, 그러면 브라우저는 구글 사이트로 가서 “Marloth Nature Reserve”에 대한 검색 결과를 반환할 것입니다.
아직 이 예제를 실행하지 않았다면, 앞에 설명한 모든 것을 따라해보십시오.
Add to action list 버튼을 클릭합니다. 위 목록에 새 액션이 나타날 것입니다.
Layer Properties 대화 창의 OK 를 클릭합니다.
이제 새로운 액션을 테스트해봅시다.
Layers list 에서 landuse 레이어를 활성화한 다음, Run feature action 버튼을 클릭하십시오.
맵 상에 보이는 토지이용구역 가운데 아무 곳이나 클릭해보십시오. 여러분의 브라우저가 열리고, 해당 구역의 name 값으로 저장된 도시를 자동으로 구글 검색할 것입니다.
주석
액션이 제대로 실행되지 않을 경우, 모든 명령어를 제대로 입력했는지 확인해보십시오. 이런 작업 시 오타가 흔하게 날 수 있습니다!
앞 단계에서 외부 브라우저에서 웹페이지를 여는 방법을 배웠습니다. 그런데 이 방식은 예측할 수 없는 의존성이라는 문제를 제기합니다. 최종 사용자의 시스템에 이 액션을 실행하는 데 필요한 소프트웨어가 반드시 있을까요? 여러분이 배운 대로, 최종 사용자가 사용하는 OS가 무엇인지 모른다면 동일한 액션에 대해 어떤 종류의 기초 명령어를 써야 하는지 확실하지 않을 수도 있습니다. 또 OS의 버전에 따라 앞에 나온 브라우저를 여는 명령어가 먹히지 않을 수도 있는데, 이 문제를 해결하지 못 할 수도 있습니다.
그러나 QGIS는 매우 강력하고 다용도인 Qt4 라이브러리를 사용하고 있습니다. 또 QGIS의 액션은 임의적이고 표식화된 (예를 들어 속성 항목의 내용에 기반한 다양한 정보를 이용하는) 파이썬 명령어일 수도 있습니다!
이제 웹페이지를 보여주는 파이썬 액션을 이용하는 방법을 배워보겠습니다. 외부 브라우저에서 웹사이트를 여는 것과 동일한 보편적인 아이디어이지만, 팝업 창에 웹사이트를 표출하는 (html 위젯에 기반한 웹킷인) Qt4 QWebView 클래스를 이용하기 때문에 사용자 시스템의 브라우저를 필요로 하지 않습니다.
이번에는 구글 대신 위키피디아를 사용해봅시다. 여러분이 요청할 URL은 다음과 같을 것입니다.
http://wikipedia.org/wiki/SEARCH_PHRASE
레이어 액션을 생성하려면,
Layer Properties 대화 창을 열고 Actions 탭을 선택합니다.
새 액션을 위한 다음 속성들을 이용해서 해당 액션을 설정하십시오.
Action (모두 한 줄로 입력): from PyQt4.QtCore import QUrl; from PyQt4.QtWebKit import QWebView; myWV = QWebView(None); myWV.load(QUrl('http://wikipedia.org/wiki/[% "name" %]')); myWV.show()
이 명령어에 대해 설명하겠습니다.
모든 파이썬 코드는 한 줄로, 쌍반점으로 구분되는 명령어들로 이루어집니다. (일반적인 파이썬 명령어들처럼 행갈이를 하지 않습니다.)
[% "name" %] 은 액션을 실행할 때 (이전과 마찬가지로) 실제 속성 값으로 대체될 것입니다.
이 코드는 단순하게 새 QWebView 인스턴스를 생성하고, URL을 설정하고, show() 를 호출해서 사용자 데스크탑에 창으로 표출되도록 합니다.
이 예제가 조금 부자연스럽다는 점을 알아야 합니다. 파이썬은 의미론적으로 특별한 들여쓰기를 사용합니다. 따라서 쌍반점으로 명령어를 구분하는 것은 파이썬을 사용하는 최적의 방식이 아닙니다. 그러므로 실제 상황에서는 파이썬 모듈에서 사용자 로직을 불러들여, 속성 항목을 파라미터로 쓰는 함수를 호출하는 일이 더 많을 것입니다.
마찬가지로 사용자 시스템의 특정 이미지 뷰어 없이도 이미지를 표출하는 방식을 쓸 수 있습니다.
앞에 설명한 방법을 사용해서, 방금 생성한 위키피디아 액션을 통해 위키피디아 페이지를 불러와보십시오.
액션을 사용하면 사용자 맵에 추가적인 기능성을 부여해서, QGIS에서 동일한 맵을 보는 최종 사용자에게 도움을 줄 수 있습니다. 어떤 OS에서도 셸 명령어는 물론 파이썬을 사용할 수 있으므로, 여러분이 생성할 수 있는 기능에 제한이란 없습니다!
벡터 데이터 생성에 대해 모두 배웠으니, 이제 문제를 해결하기 위해 이 데이터를 분석하는 방법을 배울 차례입니다. 이것이 다음 모듈의 주제입니다.