[GIS] DuraMap-Xr, 편집 Event 정리

듀라맵에서 그래픽 레이어나 SHP 파일의 도형을 편집할때.. 편집에 대한 흐름을 보다 융통성있게 처리하기 위해 다음과 같은 이벤트를 제공합니다.

  • OnEditAddedRow – 마우스를 통해 새로운 도형이 그려져 레이어에 추가된 직후 발생하는 이벤트
  • OnEditBeforeDeleteRows – 선택된 도형(들)을 DEL 키를 눌러 삭제하기 직전에 발생하는 이벤트
  • OnEditDeletedRows – 선택된 도형을 DEL 키를 눌러 삭제된 직후 발생하는 이벤트
  • OnEditModifiedRows – 선택된 도형(들)이 편집된 직후 발생되는 이벤트
  • OnEditSelectionChanging – 마우스를 통해 도형(들)이 새롭게 선택된 직후 발생하는 이벤트
  • OnEditSelectionChanged – 마우스를 통해 도형(들)을 새롭게 선택하기 직전에 발생하는 이벤트

편집에 대해서 총 6개의 이벤트를 제공합니다. 언급된 순서대로 하나 하나 예제 코드를 통해 간단히 살펴보도록 하겠습니다.

먼저 OnEditAddedRow의 이벤트에 대한 C# 코드는 다음과 같습니다.

private void Xr_OnEditAddedRow(object sender,
    XrMapLib._IXrMapControlEvents_OnEditAddedRowEvent e)
{
    int fid = e.fID;

    ....
}

이벤트 매서드의 인자로 넘겨진 XrMapLib._IXrMapControlEvents_OnEditAddedRowEvent e에는 fID라는, 새롭게 추가된 도형에 대한 ID 값이 담겨있습니다.

그리고 다음은 OnEditBeforeDeleteRows에 대해 알아보겠습니다. 이 이벤트는 도형을 삭제하기 전에 정말 삭제할지의 여부를 사용자에게 묻기 위한 용도로 사용될 수 있습니다. 코드 예입니다.

private void Xr_OnEditBeforeDeleteRow(object sender, EventArgs e)
{
    DialogResult DR = MessageBox.Show(
        "Are you sure that selected POIs be deleted?", "Delete POI",       
        MessageBoxButtons.YesNoCancel);
    Xr.Edit.AllowDeleteByKeyboard = (DR == DialogResult.Yes);
}

먼저 메세지 상자를 통해 선택된 도형을 지울 것인지를 묻습니다. 사용자가 Yes가 아닌 버튼을 누르면 Xr의 Edit 프로퍼티인 AllowDeleteByKeyboard를 false로 지정하여 삭제하지 않습니다.

다음은 OnEditDeletedRows 이벤트입니다. 이 이벤트는 선택한 도형을 DEL 키를 눌러 실제로 삭제된 직후에 발생하는 이벤트이며 도형이 삭제된 후에 어떤 일을 해야 한다면 이 이벤트에서 처리해 주면 됩니다.

그리고 OnEditModifiedRows입니다. 선택된 도형(들)을 이동하거나 새로운 정점을 추가하거나 삭제할때 발생하는 코드입니다. 코드 예는 다음과 같습니다.

private void Xr_OnEditModifiedRows(object sender, EventArgs e)
{
    ValueList id = Xr.Edit.GetSelectedRows();
    if (id.Count > 0)
    {
        ....
    }
}

위의 코드는 도형이 편집된 직후 어떤 도형이 편집되었는지를 파악하기 위해서 Xr.Edit의 GetSelectedRows 매서드를 통해 ID의 목록을 얻어올 수 있습니다. 도형이 편집된 직후 무언가를 처리해야 한다면 바로 이 이벤트에서 처리해주면 됩니다.

다음으로 OnEditSelectionChanging 입니다. 이 이벤트는 사용자가 선택된 도형에 대한 선택 상태를 변경하기 직전에 발생하는 코드로써.. 예를 들어 A라는 도형이 선택되었을때.. 아니면 선택된 도형이 없는 상태에서 B라는 다른 도형을 선택하거나 A라는 도형의 선택을 해제했을때 발생합니다. 이 이벤트에 대한 응용예는 선택된 도형을 DEL 키를 통해 삭제했을때 어떤 도형을 삭제했는지를 파악할때 사용할 수 있는 이벤트입니다.

끝으로 OnEditSelectionChanged 이벤트입니다. 이 이벤트는 사용자가 도형을 선택하거나 선택 상태를 해제한 직후에 발생하는 이벤트입니다. 사용 예제 코드는 다음과 같습니다.

private void Xr_OnEditSelectionChanged(object sender, EventArgs e)
{
    ValueList vl = Xr.Edit.GetSelectedRows();
    if (vl.Count > 0)
    {
        ....
    }
}

사용자가 도형을 선택한 후 어떤 일을 수행해야 할때 이 이벤트를 사용할 수 있습니다.

[GIS] SHP을 SQL 문으로 변환해 주는 툴 – SHP2SQL

SHP 파일의 좌표 정보와 속성 정보를 DBMS에 테이블 구조를 생성하고 값을 추가하는데 필요한 SQL문을 생성해 주는 툴입니다. 현재는 포인트 타입에 대한 SHP 파일에 대해서 적용할 수 있습니다. 먼저 실행 화면은 아래와 같습니다.

사용자 삽입 이미지
위의 UI 화면에서 Export Fields에 DBMS로 내보내고자 하는 필드를 선택하면 됩니다.. 필요없는 필드값에 대해서도 제외시켜도 됩니다. 이 기능을 이용해서 DBMS에 따라 필드명으로써 사용할 수 없는 필드는 이곳을 통해 제외시켜줄 수 도 있습니다.. 위의 화면 예시처럼 입력값들을 지정한 후 변환 버튼을 누르게 되면 다음과 같은 sql 문이 담긴 텍스트 파일이 만들어 집니다..

사용자 삽입 이미지
테이블을 생성하고 생성된 테이블에 속성값을 추가하기 위한 Ansi SQL 구문으로 구성됩니다.. 이 내용을 수정해 줄 필요(테이블명)도 있을 것입니다..  이렇게 생성된 SQL 파일을 각 DBMS에서 불러와 실행해주면 간단하게 DBMS에 SHP 파일에 대한 테이블이 생성됩니다.. MySQL의 경우 soruce 명령어를 이용해서 외부의 sql 문이 담긴 파일을 실행할 수 있습니다.

이 툴의 실행을 위해서는 최신 버전의 듀라맵을 설치하셔야 합니다. 다음 url을 통해 듀라맵을 설치하시기 바랍니다.

http://www.gisdeveloper.co.kr/notice/574

소스 코드와 컴파일된 실행 파일 모두를 제공해 드리니.. 개발자 분이라면 목적에 맞게 커스터마징해 사용하시길 바랍니다..

아래의 이미지는 위에서 만들어진 sql 구문이 담긴 text 파일을 MySQL에서 실행시켜 만들어진 테이블을 조회해 본 화면입니다.

사용자 삽입 이미지
위의 이미지를 보시면.. X, Y 필드명으로 POI의 좌표가 자동으로 추가된 것을 확인할 수 있습니다.