[BlackPoint-Xr] 퍼펙트 튜토리얼 – 16 : 수치지도 레이어에 대한 고급 사용자 정의 표현

수치지도는 지형지물에 대한 형상(도형) 정보와 함께 1:1로 연관되는 속성 데이터를 가지고 있습니다. 이 속성 데이터를 화면에 표시하거나 이를 이용해 다양한 조건으로 만들어 도형을 색상을 변경하여 표현할 수 있습니다. 이 튜토리얼에서는 임상도에 대한 SHP 파일을 이용해 도형 및 라벨을 다양한 조건에 맞춰 표현해 보는 API에 대해 설명합니다.

이 글은 퍼펙트 튜토리얼 – 2 : SHP 파일로부터 레이어 추가하기에서 작성된 코드를 기반으로 합니다.

먼저 임상도에 대한 속성 데이터를 살펴보면 다음과 같습니다.

위의 속성값 중 FIFTH_FRTP를 활용해 라벨 및 도형의 심벌 표현을 입맛에 맞게 다양하게 조정할 수 있습니다. FIFTH_FRTP는 임상도에 대한 코드 값입니다. 아래의 표는 이 코드에 대한 내용이며, 실제 의미하는 제목과 도형에 대해 표현할 색상값이 정의되어 있습니다.

코드 설명 색상 색상코드
99 해당없음 #FFFFFF
D 소나무림 #8E6343
H 활엽수림 #C6EB61
L 경작지 #DBCD00
M 침활혼효림 #90B232
O 미립목지 #BAA500
PD 소나무인공림 #6F9158
PR 리기다소나무림 #ABB66B
PT 해송림 #FFFF00
R 제지 #998B53
LP 초지 #83B680
PC 침엽수인공림 #8E841F
W 하천 #BED2FF
PH 활엽수인공림 #5F7713

임상도에 대한 SHP 파일을 레이어로 추가하는 코드를 먼저 작성합니다. LayersLoadingTask 클래스의 doInBackground 함수를 아래처럼 입력합니다.

위의 코드 중에 13, 14, 15번에 언급된 함수를 작성하는 것이 이 튜토리얼에서 설명하는 모든 것이라고 할 수 있는데요. 먼저 setLabelTextFormatter 함수를 작성해 보겠습니다. 이 함수의 작성은 코드값으로 제공되는 속성값을 라벨로 사용하기 위한 것입니다. 예를 들어 코드값이 ‘PD’라면 ‘소나무인공림’으로 표현하는 것입니다. setLabelTextFormatter 함수는 다음과 같습니다.

위의 코드를 보면 5번 코드에서 changeFormatter 함수를 통해 라벨의 Formatter를 변경하고 있습니다. 이 코드에서 언급된 CustomLabelFormatter 클래스는 아래와 같습니다.

다음은 임상의 종류가 소나무의 형태일 때 라벨의 텍스트 색상을 녹색으로 표현하고 그 외의 경우는 검정색으로 표현하도록 하는 setLabelTextColor 함수를 작성해 보겠습니다. 참고로 임상의 종류가 소나무일 때의 코드는 ‘D’, ‘PD’, ‘PR’이라는 것을 염두해 두고 아래의 setLabelTextColor 함수를 살펴보기 바랍니다.

위의 함수를 보면 5번 코드에 언급된 CustomDrawLabelTheme 클래스는 아래와 같습니다.

다음은 임상의 종류에 따라 앞서 표에서 정의된 색상으로 표현되도록 하는 setShapeColor 함수는 아래와 같습니다.

위의 코드 중 4번에 언급된 CustomShapeSymbol는 아래와 같습니다.

정리해 보면, 앞의 코드에서 3개의 새로운 클래스를 정의하였습니다. 각각 CustomLabelFormatter, CustomDrawLabelTheme, CustomShapeSymbol 클래스이며, 이 클래스들은 각각 ProgrammableLabelFormatter, ProgrammableDrawLabelTheme, ShapeSymbolProgrammable를 상속받은 것들입니다. 비록 개발자가 클래스를 직접 파생받아 구현하는 번거로운 방식같지만, 상당한 유연성을 제공하는 방식입니다. 이제 실행해 보면 아래와 같은 실행 결과를 살펴볼 수 있습니다.

DuraMap-Xr의 SpatialOperator를 이용한 공간연산 응용예

DuraMap-Xr은 Windows 기반의 Desktop GIS Application 개발을 위한 맵 엔진입니다. DuraMap-Xr의 기능 중 SpatialOperator 기능은 벡터 데이터 간의 Intersects나 Intersection과 같은 API와 단일 벡테 데이터의 Buffer 연산자와 같은 API를 제공합니다. 이러한 연산자를 이용하여 다음과 같은 기능에 DuraMap-Xr이 활용되었는데요. 간단히 소개해 봅니다.

위의 그림은 건물 레이어와 홍수범람에 대한 하천 레이어 그리고 행정구역도 레이어로 구성된 간단한 지도입니다. 건물 레이어의 건물 도형 데이터에는 인구수에 대한 속성 데이터가 조인되어 있습니다. 건물 중 홍수범람에 대한 하천 레이어의 도형과 교차(Intersects)되는 건물을 추출하고 추출된 건물에 거주하는 인구수의 총합을 계산해야 합니다. 바로 이 인구수가 홍수에 의한 피해 인구수라고 생각할 수 있습니다.

위의 UI는 위에서 설명한 기능에 대해 실제 구현한 UI입니다. 홍수피해의 결과로 4006명이 산출되었고, 피해를 받은 건물은 result.shp 파일로 저장되도록 하였습니다.

위의 이미지에서 빨간색 도형이 기능에 대한 결과로 생성된 홍수 피해를 받은 건물에 대한 레이어어 입니다. 이미지를 살펴보면, 건물이 하천 경계 도형으로 클리핑(Intersection) 처리 되어 저장된 것을 볼 수 있습니다.

DuraMap-Xr은 우리가 흔히 알고 있는 지도 위에 도형 매쉬업이라는 단순한 기능에서 한발 더 나아가 각 도형들간의 관계와 연산을 통해 더욱 의미 있는 결과를 생성해 내는 GIS 엔진입니다.