
WPF 기반 GIS 애플리케이션(SharkGeo)에서 QGIS 스타일의 분류 채색(Categorized Symbology) 과 피처 라벨(Feature Label) + 텍스트 후광(Halo) 기능을 구현한 내용을 정리합니다. 외부 라이브러리 없이 WPF DrawingContext와 MVVM 패턴만으로 구현합니다. 사실 QGIS의 기능은 너무나도 방대하기 때문에 여러 기능을 모두 사용한다는 것은 불가능합니다. 재해위험성 검토의견서에 필요한 분석이미지를 뽑아내기 위해서 또는 수계망분석을 하기 위해 QGIS 작업을 하면서 불편했던 사안에 대해서 속도감 있게 빠르게 할 수 있도록 기능구현하는 것이 목표입니다.
분류 채색에는 세 가지 데이터가 필요합니다.
첫째는 ClassifyEntry(이 값은 개별값으로 UI범례 표시용)가 필요합니다. Value와 ColorHex 코드만 담고 있는 정보클래스입니다.
두번째는 LayerItem(ViewModel 측의 속성)이 필요합니다. 어떠한 컬럼명을 어떤 색상으로 UI범례를 이용해서 색칠할때 필요합니다.
세번째는 LayerRenderOptions(렌더러에 전달되는 렌더옵션 구조체)이 필요합니다.
QGIS의 색상분류를 할때 사용자가 불편함을 토로하곤 하는데요. 분류창에 옵션이 너무 많기도 하고, 팝업을 열었다가 닫았다가, 혹은 패널을 도킹을해도 눈에 들어오지 않습니다. 저는 이런 부분들에 동선을 짧게하고, 원클릭으로 Vector위에 바로 색상을 입힐수 있도록 구성했습니다. 이는 텍스트도 마찬가지로 컬럼을 선택하고 바로 색상을 선택하거나 Buffer기능, Halo기능을 바로 적용할 수 있도록 했습니다. 벡터위에 클릭 몇번으로 산사태위험지도를 볼 수 있도록 말이죠, 산사태위험지도는 QGIS 맵작업에서도 매우 간단한 작업이라서 이러한 부분에서 시간을 지체하는 기능을 넣어서는 안된다고 봅니다.
컬럼을 설정하고, 컬러를 선택할때, 지정된 컬러를 바로 적용할 수도 있고, 그중에서 또 몇가지만 색상을 변경하고 싶으면 컬러피커를 이용해서 변경할 수 있도록 구성했습니다. 불론 부가적으로 원하는 하나의 등급(보통은 1등급이 중요하겠죠!!)만 보이게 하거나, 여러가지 색상에 대한 옵션들도 있지만, 그런 옵션들 없이도 산사태위험지도는 딱 이정도라고 봅니다.
string[] ramp = presetName switch
{
"산사태" => new[] { "#D7191C", "#FDDC00", "#A8D96C", "#6CC4E8", "#1A5BAB" },
"경사도" => new[] { "#F7FCF5", "#C7E9C0", "#74C476", "#238B45", "#00441B" },
"고도" => new[] { "#08306B", "#2171B5", "#6BAED6", "#BDD7E7", "#FFFFCC",
"#FED976", "#FD8D3C", "#E31A1C", "#800026" },
"토지이용" => new[] { "#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00",
"#FFFF33", "#A65628", "#F781BF", "#999999", "#66C2A5" },
// ...
};
각 등급을 감싸고 있는 폴리곤의 외곽라인의 색상은 보통은 검정색이지만, 이런 부분은 옵션으로 변경이 가능해야하겠죠. 셔플색상이라던지 개별색상변경 등등등 넣어지만 이정도만 작성하고 마무리합니다.
