2014년 1월 3일 금요일

[QGIS] Create Ring Maps using PyQGIS Script

공간정보 거점대학 오픈 소스 GIS 고급 과정 교재 작성 중  PyQGIS 샘플 스크립트를 작성하면서 좋은 예제가 없을까 살펴보다  Looking at Temporal Changes 블로그를 보게 되었습니다. 기존 샘플의 단계를 좀 더 줄이고, 하나의 폼에 여러 옵션을 생각해 봤습니다.

Python 및 PyQGIS를 배우고 있으며, 오류가 있을 수 있으므로 잘못된 코드가 있으면 알려 주시기 바랍니다.

▣ Reference
 - http://gis.stackexchange.com/questions/6682/how-to-implement-ringmaps-in-arcgis
 - http://www.esri.com/esri-news/arcuser/fall-2013/looking-at-temporal-changes 
 - http://www.esri.com/news/arcuser/0408/files/ringmaps.pdf
 - http://mapmaker.rutgers.edu/356/battersby_ringMaps.pdf
 
▣ Download Script & Sample Dataset
 - Script &  Dataset : https://www.dropbox.com/sh/hi892sh9usn9p8u/-xjo2yuHHy

▣ Usage
▶ 스크립트 생성
 - 우선 QGIS 실행 후 [Processing] -> [Toolbox] 실행 후 [Scripts] -> [Tools] -> Create new script를 실행
- 다운로드한 샘플 스크립트를 불러온 후 저장하고 닫음
- 다음 그림과 같이 새로운 스크립트가 생성
 - 첨부된 샘플 데이터셋을 불러온 후 스크립트 실행

 ▶ Comma Separated Fields
 - 아래 그림(샘플 데이터셋에 다음과 같이 구성되어 있음)과 같이 레이어의 각 피처에 시계열 속성이 필드로 포함되어 있는 경우
 - 스크립트 실행 후 다음 그림과 같이 콤마로 분리된 시간순의 필드 목록을 입력합
 - Ring Gap 은 각 링 사이의 간격으로 링 하나 크기의 (1 / 10) 크기의 공백을 생성 가능
 - 실행 결과는 2개의 레이어(ring map 및 ring anchor)가 생성되며 ring_val 필드값을 이용해서 시각화 가능



▶ Ring Number
 - 만약 ESRI 샘플처럼 속성 테이블이 따로 있는 경우 ring map template 만 생성하는 과정
 - ring 갯수를 속성으로 입력
 - 실행 결과는 2개의 레이어(ring map 및 ring anchor)가 생성되며 ring_val 필드값은 0값을 기본으로 가짐
 - 이후 속성 테이블과 적절하게 키 필드를 구성(Field Calculator 등 사용)하여 조인(Join)해서 시각화

▶ Ring Anchor
 - 지시선 라인 데이터에 원본 데이터셋의 속성을 포함하여 지시선에 레이블링 할 수 있도록 함
▣ Examples