[GIS] FingerEyes, 지오메트리의 버퍼(Buffer) 연산

핑거아이즈는 공간서버인 지오서비스(GeoService-Xr)의 지오프로세싱(Geoprocessing) 서비스를 통해 지오메트리의 버퍼 연산을 수행할 수 있습니다. 아래의 코드는 레이어의 구성 항목 중 하나의 도형에 대해 버퍼 반경값 10으로 하여 버퍼 연산을 수행하는 코드입니다.

var ml:XrMashupLayer = _map.layers.getLayer("myLyr") as XrMashupLayer;
var mashup:IXrMashup = ml.getMashup(0);
if(mashup != null)
{
    var wkt:IXrWKT = mashup as IXrWKT;
    var strKwt:String = wkt.toWKT();
    var loader:URLLoader = new URLLoader();
    var url:String = "http://www.gisdeveloper.co.kr/Gp?command=buffer;geometry=" 
        + strKwt + ";distance=10";
    var request:URLRequest = new URLRequest(url);

    loader.addEventListener(Event.COMPLETE, onBufferRequestCompleted);
    loader.load(request);			
}

1번과 2번 코드를 통해 버퍼 연산 대상이 되는 도형을 가져옵니다. 그리고 이 도형에 대한 지오메트리 정보를 WKT 형식으로 변환하는 코드가 5~6번 코드입니다. 마지막으로 7~13번 코드를 통해 공간서버로 요청을 날립니다. 아래의 이미지는 버퍼 연산의 대상이 되는 도형입니다.

사용자 삽입 이미지

버퍼 연산 서비스를 요청하고 그 결과는 onBufferRequestCompleted 함수를 통해 전달되며 다음과 같은 예로 구성될 수 있습니다.

private function onBufferRequestCompleted(event:Event):void
{
    var loader:URLLoader = event.target as URLLoader;
    var result:String = loader.data;				
    var ml:XrMashupLayer = 
        _map.layers.getLayer("myLyr") as XrMashupLayer;
    var mashup:IXrMashup = ml.getMashup(0);
    if(mashup != null)
    {
        var wkt:IXrWKT = mashup as IXrWKT;
        wkt.fromWKT(result);
        ml.updateItem(0, false);
    }

    loader.removeEventListener(Event.COMPLETE, onBufferRequestCompleted);
}

버퍼 연산 결과에 대한 지오메트리 역시 WKT 형식입니다. 연산 결과를 다시 대상이 되는 도형에 반영하고 있습니다. 그 결과는 다음과 같습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다