김형준 GIS 연구소 (for Developers)  
Front Page
Notice | E-Mail | Admin | Write Article   
 
2011/05/02 15:40 2011/05/02 15:40
[FingerEyes] 차트 표시하기(차트 레이어 추가)

핑거아이즈에 대한 마지막 API 사용 실습 튜토리얼로써 공간상에 의미있게 분포되어 있는 수치데이터를 차트로 표현하는 기능에 대해 살펴보겠습니다. 이 글에 대한 최종 결과에 대한 실행은 아래와 같습니다. 각 집계구에 나이대별 인구수를 파이차트로 표현하는 예입니다.

사용자 삽입 이미지
실행 결과 보기 및 소스코드 다운로드

위의 실행 결과를 살펴보면 어플리케이션에 대한 UI는 총 3개입니다. 차트표시라는 버튼, 범례표시라는 버튼 그리고 맵 컴포넌트입니다. 이 UI를 구성하기 위해 먼저 MXML Application을 추가하고 UI 구성을 위한 MXML에 다음과 같은 코드를 추가합니다.

맵 컴포넌트에 대한 네임스페이스를 xr로 잡고 있는데 이 네임스페이스가 유효하기 위해서는 Application 태그쪽에 다음과 같은 네임스페이스 속성이 필요합니다.

다시 UI 구성을 위한 코드를 살펴보면.. 맵 컴포넌트의 id를 map으로 주어 다른 코드부에서 참조할 수 있게 했으며 차트표시 버튼의 이벤트는 onChartClick 핸들러 함수에 할당했고 범례표시는 onLegendClick 핸들러 함수에 할당했습니다. 이 두개의 핸들러 함수에 집중하기 전에 먼저 배경이 되는 지도 레이어를 구성하는 코드를 살펴보겠습니다. 지도 레이어 준비는 어플리케이션의 initialize 이벤트가 적당하며 여기서는 onInit 핸들러 함수에 이 이벤트를 할당했습니다.

3~5번 코드는 배경도로써 타일맵 레이어를 추가하는 코드이고 7~13번 코드는 어플리케이션이 시작할때 초기 지도뷰를 설정하는 코드이며 15~26번 코드는 차트 데이터를 위한 Shape 지도 레이어를 추가하는 코드입니다. 17~21번 코드는 Shape 지도 레이어의 그리기 심벌을 지정하는 코드이고 22번 코드는 통계 데이터에 대한 속성값을 할당 서버로부터 가져오라는 의미입니다. 그리고 23~25번 코드는 해당 Shape 맵 레이어가 사용자에게 보여지는 레벨을 10~11단계 사이에서만 보여지도록 하겠다는 의미입니다. 끝으로 28번 코드는 사용자 정의함수로 여기에 차트 표시를 위한 차트 레이어 추가를 위한 함수입니다. addChartLayer 함수를 살펴보겠습니다.

3번코드가 차트 레이어를 생성하는 코드입니다. 그리고 4~5번 코드는 차트 레이어를 그릴때 외곽선에 대한 심벌입니다. 그리고 7~20번은 차트를 그릴때 사용하는 채움심벌을 위한 것으로 총 14개를 생성하고 있습니다. 왜 14개인가 하면... 22~35번 코드를 살펴보면 쉽게 이해할 수 있습니다. 우리는 파이차트를 그릴 것인데.. 이 차트를 구성하는 각 항목이 총 14개이고.. 나이대별(4세 이하, 5~9세 등등) 항목으로 구성하게 됩니다. 각 항목에 대해 앞서 생성해 놓은 채움심벌을 각각 지정해 놓고 있습니다. 이러한 설정이 적동된 차트레이어를 37번 코드를 통해 레이어로써 추가해 놓습니다. 이제 차트 레이어까지 추가되어 차트를 구성하기 위한 준비가 끝났군요! 다음으로 차트표시 버튼에 대한 이벤트 코드를 살펴봄으로써 차트를 어떻게 표현하는지 알아보겠습니다!

코드가 상당히 긴편인데요. 실제로 참조하는 속성값이 14개나 되기때문에 길어보일뿐입니다. 하나 하나 살펴보면 단순합니다. 먼저 3번코드는 앞서 추가한 차트 레이어를 구합니다. 그리고 5번 코드를 통해 기존의 차트 데이터를 깨끗하게 지움니다. 이렇게 지우니 매번 버튼을 누를때마다 새롭게 차트를 구성할 수 있게 됩니다. 7번 코드는 차트를 구성하기 위한 수치 데이터를 참조할 Shape 맵 레이어를 구합니다. 12번 코드에 대한 반복문을 통해 Shape 맵 레이어를 구성하는 모든 도형에 대한 중심점(15번 코드)와 이 도형의 fid를 통해 얻은 속성값(19번 코드)를 통해 차트를 구성하게 됩니다. 참고로 앞서 모든 도형이라고 언급했으나 실제로는 화면상에 표시되는 도형입니다. 화면 밖의 표시되지 않은 도형은 해당사항이 없습니다. 23~36번 코드가 앞서 언급한 총 14개의 통계값을 읽기 위한 필드 인덱스를 구하는 코드들이고 실제 통계 데이터를 가져오는 코드는 38~51번 코드들입니다. 이렇게 구한 통계 값들을 53번 코드를 통해 지정하여 차트의 아이템으로써 도형의 중심점 좌표와 함께 추가해 줍니다. 최종적으로 차트 아이템들이 추가 완료되면 64번 코드를 통해 새롭게 재구성해 줘야 합니다. 이 재구성이 완료되면 차트가 화면상에 짠~ 하고 표시됩니다. 이제 이 차트 레이어에 대한 범례 구성을 위한 범례표시 버튼에 대해 이벤트 코드에 대해 살펴보겠습니다.

차트 레이어에 대한 범례 구성은 듀라맵의 레이아웃 구성 기법에 유사합니다. 이에 대한 자세한 내용은

http://www.gisdeveloper.co.kr/586을 참고하시기 바랍니다. 다른 점은 차트 레이어에 대해 특별하게 제공되는 범례 구성 항목으로써 XrPieChartLegendItem이 있으며 이 항목을 차트레이어와 연계하여 쉽게 차트 범례를 구성할 수 있습니다.

이상으로 Xr 솔루션 중 RIA 기반의  GIS 솔루션을 담당하는 핑거아이즈에 대한 기본적인 API 사용법에 대한 포스팅을 마무리 하도록 하겠습니다.

Tag : , ,
Track this back : http://www.gisdeveloper.co.kr/trackback/710
Commented by 정만희 at 2011/05/03 09:04  r x
차트 표시하기!
정말 깔끔하고 예쁩니다.
한 눈에 쏙 들어오게 표현됐네요
Replied by 김형준 at 2011/05/04 10:10 x
좋은 말씀 감사합니다.

name    password    homepage
 hidden
BLOG main image
 Notice
DuraMap-Xr 소개 및 다운로드
[오픈소스] SimpleSHP v0.1
FingerEyes-Xr 소개 및 다운로드
OpenGL Tutorials
 Category
전체 (552)
GIS 개발 (155)
프로그래밍 (240)
스치는 생각들 (128)
번역 또는 집필 (3)
영작학습 (6)
 TAGS
GIS Xr OpenGL Shader BlackPoint FingerEyes Algorithm Java Map Engine WPF
 Calendar
«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
 Recent Entries
English Writing Study
English Writing Study
English Writing Study 4
English Writing Study 3
English Writing Study 2
 Recent Comments
안녕하세요~ 코봉히님....
김형준 - 05/15
동부->중부 좌표변환할 일...
코봉히 - 05/14
잘봤습니다.
지나가다 - 05/11
지금 사용하고 있는 dem...
김형준 - 05/04
단면도 측정 결과를 보고....
아무개 - 05/02
출처를 밝히시면 마음껏...
김형준(Dip2K) - 05/02
하나더 말씀을 안드렸네요...
Begginer - 05/02
고맙습니다. OpenGL으로...
Begginer - 05/02
네, 기존 버전에 대해 불...
김형준(Dip2K) - 05/01
정말 감사합니다..새로운...
조성각 - 05/01
 Archive
2012/05
2012/04
2012/03
2012/02
2012/01
2011/12
2011/11
2011/10
2011/09
2011/08
2011/07
2011/06
 Link Site
Adobe Flex 3 Help
Cartograph 2.0
GADM
GIS 위키디피아
GIS 프로그래밍 연구소
MapTools.org
OGC
OGRE3D
OSGeo 한국 지부
Paul Bourke Site
Wikipedia
국가수자원관리 정보시스템
국립지리원
국토연구원
국토해양부
네이버 과학
대한측량협회
류광님의 블로그
이민파님의 공간분석과 리...
지오서비스(GeoService)
 Visitor Statistics
Total : 982091
Today : 113
Yesterday : 582
태터툴즈 배너
rss