[GIS] ArcObjects, 도형의 좌표 구하기

ArcObjects를 통해 SHP 파일을 읽어서 만든 레이어를 화면상에 표시한 후… 이 레이어를 구성하는 도형(Shape) 좌표를 구하는 방법을 정리해 보았습니다. ArcObjects에서 제공하는 Map 컨트롤을 통해 SHP 레이어가 하나 추가되었다고 가정하겠습니다. 참고로 이 포스트는 레이어가 폴리곤 도형으로 구성된 레이어를 대상으로 합니다.

가장 먼저 해야할 일은 지도 컨트롤이 가지고 있는 레이어를 가져오는 일입니다. 가져올때 도형 정보에 접근해야 하므로 IFeatureLayer 인터페이스 타입으로 가져와야 합니다.

ESRI.ArcGIS.Carto.IFeatureLayer pFL;
pFL = axMapControl1.get_Layer(0) as ESRI.ArcGIS.Carto.IFeatureLayer;

이렇게 가져온 IFeatureLayer 변수인 pFL을 통해 각각의 Feature를 얻어오기 위해 IFeatureClass와 IFeatureCursor를 이용합니다.

ESRI.ArcGIS.Geodatabase.IFeatureClass pFClass;
pFClass = pFL.FeatureClass;

ESRI.ArcGIS.Geodatabase.IFeatureCursor pFCursor;
pFCursor = pFClass.Search(null, false);

이제 레이어를 구성하는 Feature를 읽을 수 있는 준비가 되었습니다. 아래의 반복문을 통해 각각의 Feature를 순회하면서 원하는 좌표를 읽게 됩니다.

ESRI.ArcGIS.Geodatabase.IFeature pFeature;            
while((pFeature=pFCursor.NextFeature()) != null) {
    ....
}

아래의 코드가 위의 코드의 반복문 사이(while문)에 들어가는 코드입니다. 도형은 Point의 집합이므로 IPointCollection 인터페이스 타입이 필요하며 각 포인트 좌표값과 관련 정보를 얻기 위해 IEnumVertex 인터페이스가 필요합니다.

    ESRI.ArcGIS.Geometry.IPointCollection pPC;
    pPC = pFeature.Shape as ESRI.ArcGIS.Geometry.IPointCollection;

    ESRI.ArcGIS.Geometry.IEnumVertex pEV = pPC.EnumVertices;

    ESRI.ArcGIS.Geometry.IPoint pPt;
    int outPartIndex;
    int vertexIndex;
    listBox1.Items.Add("FID: " + pFeature.OID);
    for(int i=0; i<pPC.PointCount; ++i) {
        pEV.Next(out pPt, out outPartIndex, out vertexIndex);
        listBox1.Items.Add("    Part Idx :" + outPartIndex + 
            " Vertex Idx : " + vertexIndex + " (" + pPt.X + "," + pPt.Y + ")");
    }

비록 이 포스트의 글은 폴리곤 레이어에 대한 내용이지만 이 보다 간단한 포인트나 폴리라인에 대해서도 쉽게 좌표를 읽을 수 있습니다. 마지막으로 아래는 위의 코드들을 실행했을때의 결과 입니다.

사용자 삽입 이미지

답글 남기기

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