[GIS] FingerEyes-Xr, 속성값에 따라 라벨의 폰트 심벌 다르게 지정하기

웹 GIS 솔루션이자 엔진인 FingerEyes-Xr에서 라벨을 표시할때 속성값에 따라 다양한 모양으로 라벨을 표시하고자 하는 경우에 대한 내용입니다. 예를 들어서 지적도에 대한 필지값이 ‘전’, ‘구’, ‘임’, ‘도’, ‘답’으로 끝나는 경우에 대해 각기 다른 폰트 심벌로 표시하고자 할때 사용할 수 있는 방법입니다. 아래의 화면은 실제 이와 같은 경우에 대한 실행 화면입니다.

사용자 삽입 이미지

위의 화면에서 보는 것처럼 하나의 레이어에 대해서 속성값에 따라 다양한 폰트 색상으로 표시하고 있습니다. 색상 뿐만 아니라 폰트의 크기, 스타일 등도 지정할 수 있습니다.

이와 같은 처리를 위해서 먼저 다음과 같이 적용 대상이 되는 레이어의 라벨을 설정합니다.

var slyr:XrShapeMapLayer = map.layers.getLayer("JIBUN") as XrShapeMapLayer;
slyr.label.fieldName = "PAR_LBL";
slyr.label.enable = true;
slyr.label.labelSymbolTheme = new CustomLabelSymbolTheme();

1~3번 코드는 일반적인 레이어를 얻고 라벨을 설정하는 코드이고, 4번 코드가 바로 속성값에 따라 다양한 심벌을 제공해 주는 사용자 정의 클래스입니다. 사용자 정의 클래스인 CustomLabelSymbolTheme은 IXrProgrammableLabelSymbol 인터페이스를 구현합니다. 이 클래스에 대한 코드는 다음과 같습니다.

package
{
    import geoservice.data.XrAttribute;
    import geoservice.data.XrFieldSet;
    import geoservice.view.label.IXrProgrammableLabelSymbol;
    import geoservice.view.symbols.XrFontSymbol;
	
    public class CustomLabelSymbolTheme implements IXrProgrammableLabelSymbol
    {
        // 각각 전, 구, 임, 도, 답일 경우와 그외의 경우에 사용할 폰트 심벌을 정의
        private var sym_A:XrFontSymbol = null;
        private var sym_B:XrFontSymbol = null;
        private var sym_C:XrFontSymbol = null;
        private var sym_D:XrFontSymbol = null;
        private var sym_E:XrFontSymbol = null;
        private var sym_F:XrFontSymbol = null;
		
        public function CustomLabelSymbolTheme()
        {
            // 폰트 심벌을 매우 빈번하게 사용하므로 생성자에서 미리 만들어 놓아
            // 퍼포먼스를 향상 시킬 수 있다.
            sym_A = new XrFontSymbol();
            sym_A.fontSize = 12;
            sym_A.fontColor = 0xff0000;
            sym_A.textOutlineColor = 0x000000;
			
            sym_B = new XrFontSymbol();
            sym_B.fontSize = 12;
            sym_B.fontColor = 0xffff00;
            sym_B.textOutlineColor = 0x000000;
			
            sym_C = new XrFontSymbol();
            sym_C.fontSize = 12;
            sym_C.fontColor = 0x0000ff;
            sym_C.textOutlineColor = 0x000000;
			
            sym_D = new XrFontSymbol();
            sym_D.fontSize = 12;
            sym_D.fontColor = 0xff00ff;
            sym_D.textOutlineColor = 0x000000;
			
            sym_E = new XrFontSymbol();
            sym_E.fontSize = 12;
            sym_E.fontColor = 0xea3366;
            sym_E.textOutlineColor = 0x000000;
			
            sym_F = new XrFontSymbol();
            sym_F.fontSize = 12;
            sym_F.fontColor = 0xffffff;
            sym_F.textOutlineColor = 0x000000;
        }
		
        public function getSymbol(attr:XrAttribute, fieldIndex:int, 
            fieldSet:XrFieldSet):XrFontSymbol
        {
            // 라벨의 문자열로 사용할 값을 얻는 코드.
            // 기본적으로 라벨을 위한 필드로 지정한 필드 인덱스가 인자로 넘어옴.
            // 인자에 FieldSet이 제공되므로 이를 이용해 다른 필드값도 사용할 수 있음.
            var v:String = attr.getValueAsString(fieldIndex);
			
            // 필드값이 전을 포함하면 sym_A를 사용하는 식이다.
            if(v.indexOf("전") != -1) {
                return sym_A;
            }
			
            if(v.indexOf("구") != -1) {
                return sym_B;
            }
			
            if(v.indexOf("임") != -1) {
                return sym_C;
            }
			
            if(v.indexOf("도") != -1) {
                return sym_D;
            }
			
            if(v.indexOf("답") != -1) {
                return sym_E;
            }
			
            // 그외의 경우에 대한 심벌 반환
            return sym_E; // null을 반환하면 라벨이 표시되지 않음.
        }
    }
}

[GIS] FingerEyes-Xr, 선형에 대해 자동으로 회전하는 라벨링

핑거아이즈 최신 버전에서는 선형 레이어에 대한 라벨이 선의 기울기에 따라 회전하도록 개선되었습니다. 아래는 도로명 주소에 대한 라벨이 도로의 방향에 따라 회전하는 핑거아이즈 실행화면입니다.

사용자 삽입 이미지

라벨의 텍스트에 기본적으로 외곽선을 표시함으로써 다른 그래픽 요소와 분명히 구별되어 깔끔하게 표시가 되는 것을 볼 수 있습니다.

핑거아이즈에서 이러한 라벨의 회전을 위해서는 폰트를 내장(embed)해야 합니다. 이는 핑거아이즈의 기반 기술인 Flex SDK에서 텍스트를 회전하기 위해서는 폰트를 내장해야 하기 때문입니다.

사용할 폰트는 제가 요즘 그 매력에 푹 빠져 있는 네이버 나눔명조입니다. 보시는 것처럼 플래시빌더에서 assets 폴더에 해당 폰트를 Copy & Paste 합니다.

사용자 삽입 이미지

이처럼 내장한 폰트를 코드에서 사용하기 위해서는 타입화를 해야 하며 다음의 코드를 통해 가능합니다.

[Embed(source="assets/NANUMMYEONGJOEXTRABOLD.OTF", 
    fontFamily="NANUMMYEONGJO", 
    mimeType="application/x-font-opentype", 
    fontWeight="bold", 
    embedAsCFF="false")]
private var NANUMMYEONGJO:Class;

이제 마지막으로 다음 코드를 통해 핑거아이즈에서 기본적으로 사용할 폰트를 지정해 줌으로써 폴리라인에 대한 라벨을 회전할 수 있습니다.

XrMap.optionEmbedFontName = "NANUMMYEONGJO";

참~ 쉽습니다. ^^ 끝으로 핑거아이즈는 웹 기반의 GIS 엔진입니다. Flex 버전과 JavaScript 버전이 있습니다. Flex 버전은 빠른 퍼포먼스를 자랑하는 반면 JavaScript는 순수한 웹표준을 지원합니다. 그 활용 목적에 맞는 버전을 선택할 수 있는 유연함을 자랑합니다.