[GIS] FingerEyes, Geometry로 Feature 가져오기

Geometry로 Feature를 가져온다는 의미는 임의의 지오메트리와 공간상에서 교차하는 Feature를 가져온다는 의미입니다. 임의의 지오메트리이므로 폴리곤, 폴리라인, 포인트 등 제약이 없습니다. 기준 지오메트리는 WKT 형식으로 쉽게 지정할 수 있습니다. 다음은 지정한 폴리라인과 교차하는 Feature를 서버측으로부터 가져오라는 코드 예입니다.

var pnuLyr:XrShapeMapLayer = map.layers.getLayer("JIBUN") as XrShapeMapLayer;
if(pnuLyr != null)
{
    var bOK:Boolean = pnuLyr.queryByGeometry(
        "LINESTRING(250661 54225, 250343 53233)",
        true,
        callback);

    if(!bOK)
    {
        // Error !
    }
}

대상이 되는 레이어를 1번 코드를 통해 가져옵니다. 속성과 도형에 대한 기능이므로 XrShapeMapLayer만이 가능합니다. 그리고 4번에서 queryByGeometry 매서드를 통해 쿼리 합니다. 첫번째 인자는 기준 지오메트리로써 WKT 형식으로 지정합니다. 그리고 두번째 인자는 도형 데이터 뿐만 아니라 속성 데이터까지 가져오라는 의미입니다. 그리고 세번째 인자는 공간 데이터 쿼리가 완료되었을때 발생하는 콜백함수이며 아래는 그 예입니다.

private function callback(arg:XrSpatialQueryResult):void  
{   
    if(arg != null)   
    {   
        var shp:IXrShape = null;   
        var shapes:Object = arg.shapeSet.rows;   
        for each(shp in shapes)   
        {   
            var attribute:XrAttributes =    
                arg.attributeSet.rows[shp.fid] as XrAttribute;   
            if(attribute != null)   
            {   
                trace(shp.centroid.x + " " + shp.centroid.y    
                    + " " + attribute.getValueAsString(1));   
            }   
        }   
    }   
    else  
    {   
        // 아무것도 오질 않았음..   
    }   
}  

서버 측으로 받은 결과에서 도형의 중심점과 2번째 속성값만을 확인하는 예입니다.

[GIS] FingerEyes, FID 리스트로 Feature 가져오기

FID값은 FeatureID로써 이 값에 대한 Feature를 가져오는 예제 코드입니다. 참고로 Feature는 공간 데이터 + 속성 데이터의 셋입니다.

var pnuLyr:XrShapeMapLayer = map.layers.getLayer("JIBUN") as XrShapeMapLayer;
if(pnuLyr != null) {
    var fids:Vector. = new Vector.();
    fids.push(100, 200, 300, 400, 500, 600, 700, 10000);
    if(!pnuLyr.queryByFIDs(fids, true, callback))
    {
        // Query Request Error !!
    }
}

먼저 대상 레이어를 파악해야 합니다. FID에 관련된 레이어이므로 1번 코드에서 XrShapeMapLayer가 필요하고 요청할 FID의 리스트를 3~4번에서 만들고 있습니다. 그리고 5번 코드에서 queryByFIDs 매서드를 통해 리퀘스트를 서버에 날립니다.

서버에 대한 응답은 비동기적으로 처리되므로 콜백함수가 필요하며 queryByFIDs의 세번째 인자에 지정합니다. 두번째 인자는 공간 데이터 뿐만 아니라 속성 데이터까지 가져오라는 의미입니다. 그렇다면 서버로부터 받은 Feature를 처리하기 위한 콜백함수를 살펴보면, 그 예는 다음과 같습니다.

private function callback(arg:XrSpatialQueryResult):void
{
    if(arg != null)
    {
        var shp:IXrShape = null;
        var shapes:Object = arg.shapeSet.rows;
        for each(shp in shapes)
        {
            var attribute:XrAttributes = 
                arg.attributeSet.rows[shp.fid] as XrAttribute;
            if(attribute != null)
            {
                trace(shp.centroid.x + " " + shp.centroid.y 
                    + " " + attribute.getValueAsString(1));
            }
        }
    }
    else
    {
        // 아무것도 오질 않았음..
    }
}

결과가 오면 도형의 중심점과 두번째 속성값을 표시하는 코드입니다.