[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
    {
        // 아무것도 오질 않았음..
    }
}

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

[GIS] FingerEyes, UPDATE, INSERT, DELETE SQL 문 실행

핑거아이즈는 서버측의 DBMS에 UPDATE, INSERT, DELETE와 같은 SQL 문을 실행할 수 있도록 요청할 수 있습니다. 다음 코드는 그 예입니다.

var svc:XrUpdateTableService = new XrUpdateTableService(
    "127.0.0.1:8076",
    "postgis",
    __completed,
    __error
);

var sql:String = "INSERT INTO tstTbl VALUES (100, '안녕하세요!')";

svc.run({sql:sql});

SQL문의 실행을 서버측에 요청하고 그 결과를 받아오는 일련의 과정을 사용하기 쉽게 캡슐화된 XrUpdateTableService 클래스를 이용합니다. 서버의 IP와 사용하는 DBMS의 종류 그리고 SQL 문이 서버측에서 성공적으로 실행되었을때와 실패했을때에 대한 콜백함수를 생성자의 인자로 지정합니다.

아래는 SQL문이 성공적으로 실행되었을때와 실패했을때에 대한 콜백함수의 예입니다.

protected function __completed(cntRowUpdated:uint):void
{
    // cntRowUpdated는 SQL문의 실행에 의해 영향을 받은 Row의 수
}

protected function __error():void
{
    // SQL 실행하는데 문제 있음
}