[GIS] Hexagon Builder, 정형화된 헥사곤(육각형) 생성툴

폴리곤 SHP을 꽉 채우는 일련의 정형화된 헥사곤(육각형)을 생성해 SHP 파일로 저장해 주는 툴입니다. 기존의 폴리곤 SHP 파일의 속성을 그대로 유지해 저장되므로 여러가지 통계 데이터의 가시화를 위해 유용하게 사용될 수 있습니다. 아래의 화면은 실행 화면입니다.

입력할 SHP 파일과 생성될 결과 SHP 파일을 지정하고 헥사곤의 반지름 값만을 입력하면 됩니다. 아래는 이 툴을 이용해 세종시의 행정구역 데이터를 기반으로 정형화된 헥사곤을 생성한 결과를 표시한 것입니다.

설치 파일은 아래의 URL을 통해 다운로드 받으실 수 있습니다. 이 툴의 소소코드가 필요하신 분은 메일을 통해 요청하시면 보내 드리도록 하겠습니다.

[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을 반환하면 라벨이 표시되지 않음.
        }
    }
}