XrReverseGeocoder ㅡ 좌표를 새주소로 변환하는 툴

좌표를 새주소로 변환하는 툴입니다. SHP 파일을 구성하는 포인트의 좌표에 대한 새주소(도로명주소)를 필드값으로 추가하여 새로운 SHP 파일을 생성해 줍니다. SHP 파일의 좌표계는 GPS 좌표, 즉 WGS94 경위도 좌표계여야 하며 포인트(Point) 타입이여야 합니다. 아래는 이 프로그램의 실행 화면입니다.

사용자 삽입 이미지

이 프로그램을 이용하여 포인트 좌표에 대해 변환된 주소는 새로운 SHP 파일의 속성값으로 저장되며 아래는 그 결과에 대한 예입니다.

사용자 삽입 이미지

이 프로그램은 DuraMap-Xr 컴포넌트를 필요로 합니다. 만약 이전에 DuraMap-Xr을 설치하지 않았다면 DuraMap-Xr의 설치를 위해 아래의 프로그램을 다운로드 받아 실행하시기 바랍니다.



아래는 이 프로그램에 대한 다운로드입니다. 다운로드 받아 원하는 폴더에 압축을 풀고 별도의 설치 없이 바로 실행할 수 있습니다.

[GIS] 듀라맵을 이용한 폴리곤 자르기(Split) 데모

듀라맵을 이용한 공간 분석 시스템을 작년부터 진행하고 있었습니다. 1차 마무리를 하고 추가 요구사항이 생김으로써, 해당 요구사항을 반영하면서 해당 내용 중 필요한 일부 기능인 폴리곤 자르기에 대한 데모를 동영상으로 소개합니다.

사용자 삽입 이미지
데모시연 동영상

듀라맵은 작지만 GIS 엔진으로써 갖춰야할 전반적이고 기본적인 기능을 모두 갖추고 있습니다. 또한 이러한 GIS에 대한 기본 기능을 통해 보다 고도화된 고급기능을 PlugIn 형태로 확장할 수 있습니다.

[GIS] 공간 데이터 좌표 변환툴 – XrProjection

이 툴에 대한 최신 버전은 XrProjection v3.1 을 통해 다운로드 받아 사용하시기 바랍니다.

개발자 피드백

  • EPSG900913(구글좌표계)를 지원합니다. 구글좌표계는 WGS84 타원체를 사용하므로 WGS84 타원체가 아닌 좌표계 간의 변환에서는 반드시 변환 파라메터를 지정하셔야 합니다 ㅡ 2013/07/23
  • WGS80 타원체의 경위도에 대한 Bessel 타원체/GRS80 타원체의 경위도에 대한 상호 좌표변환은 반드시 변환 파라메터 사용 여부를 체크해야 옳바르게 변환됩니다 ㅡ 2013/05/30
  • 행안부 새주소 좌표계(UTM-K)와 관련된 좌표계 변환 정확도 문제 제거하였습니다 ㅡ 2013/03/22
  • WGS84 타원체에서 다른 좌표계로의 변환 정확도 문제를 제거하였습니다 ㅡ 2012/10/28

공간 데이터에 대한 좌표 변환툴입니다. SHP 파일에 대한 좌표 변환과 폴더에 저장된 모든 파일에 대한 좌표 변환 그리고 좌표 하나에 대한 좌표 변환 끝으로 Degree와 DMS 간의 변환 기능을 제공합니다. 이와 함께 좌표 변환에 사용되는 3 파라메터와 7 파라메터를 지정할 수도 있습니다.

각 기능에 대한 UI는 탭으로 독립되어 있어서 사용하기에 쉽고 직관적입니다. 이 프로그램에 대한 소스 코드와 실행 파일을 별도로 분리하여 아래 링크를 통해 다운로드 받을 수 있습니다. 이 프로그램은

듀라맵과 .NET 2.0 프레임워크를 사용합니다.

먼저 좌표변환시 사용할 3 파라메터 또는 7 파라메터를 지정하는 UI입니다. 실제 업무에서 있어서 특별한 경우가 아니라면 이 파라메터의 지정은 하지 않으며 공간 데이터를 제공하는 곳에서 특별한 언급이 있는 경우에 사용하시기 바랍니다.

사용자 삽입 이미지
다음은 하나의 SHP 파일에 대한 좌표 변환 기능입니다. 변환하고자 하는 SHP 파일과 변환하고자 하는 SHP 파일의 원래 좌표계를 지정하고 변환되어 저장 출력될 SHP 파일과 변환될 좌표계를 지정하면 됩니다.

사용자 삽입 이미지
다음은 폴더 단위로 좌표변환을 하는 기능입니다. 지정한 폴더에 저장된 모든 SHP 파일이 좌표 변환되어 원하는 출력 폴더로 저장됩니다. 많은 SHP 파일을 한번에 좌표 변환할때 유용하게 사용할 수 있는 기능입니다.

사용자 삽입 이미지
다음은 하나의 좌표에 대한 변환 기능입니다. 하나의 좌표의 변환만을 해보거나 좌표 변환 기능을 테스트해 볼 때 유용한 기능입니다.

사용자 삽입 이미지
끝으로 하나의 Degree(도) 단위 값의 각도를 DMS(Degree, Minute, Second)의 3개의 값으로 분리하거나 이와 반대로 변환해 주는 기능입니다.

사용자 삽입 이미지
이 프로그램은 맵엔진인 듀라맵을 이용해 개발되었습니다. 실행을 위해 먼저 듀라맵을 시스템에 등록하셔야 합니다. 듀라맵에 대한 소개는 다음 UR을 통해 살펴보시기 바랍니다.

[GIS] DuraMap-Xr을 활용한 Windows 기반의 GIS 프로그래밍

듀라맵은 작고 가벼운 GIS 엔진으로 빠르고 풍부한 기능을 제공합니다. 수치지도와 항공영상 기반의 지도 표시, 공간 데이터 편집, 지오메트리와 그리드 기반의 공간분석, 통계 데이터의 차트 표시, 좌표변환, 공간 데이터 생성과 같은 기능을 제공합니다.

사용자 삽입 이미지
듀라맵을 활용한 윈도우즈 기반의 GIS 프로그래밍을 위한 개발자 문서입니다. 문서의 다운로드는 다음 URL을 참고하시기 바랍니다.

[GIS] DuraMap-Xr, 타일맵 레이어

듀라맵은 3.8 버전부터 타일맵 형태의 배경지도를 인터넷을 통해 받아 사용자에게 제공할 수 있습니다. 아래는 듀라맵을 이용해 타일맵 레이어를 추가하여 실행한 화면입니다.

사용자 삽입 이미지
위 화면에 대한 예를 통해 듀라맵에서 타일맵 레이어를 추가하는 API를 살펴보도록 하겠습니다. 저는 여기서 VB를 이용하였습니다. 듀라맵은 COM 기반의 ActiveX 컴포넌트로 ActiveX 개발시 디버깅에 VB가 적합하여 사용하였습니다. 듀라맵은 C#과 델파이와 같은 COM을 지원하는 개발언어에서도 사용할 수 있습니다.

먼저 위의 화면에 보이는 것처럼 4개의 버튼과 듀라맵 컴포넌트를 화면상에 배치합니다. 4개의 버튼에 대한 Caption은 각각 Connect, Zoom In, Zoom Out, Pan Mode로 합니다. Connect 버튼은 인터넷을 통해 타일맵을 서비스 받을 수 있도록 연결하는 기능이며 Zoom In과 Zoom Out은 각각 지도 확대 레벨을 변경하여 지도를 확대하고 축소하는 기능입니다. 끝으로 Pan Mode는 지도를 마우스를 이용해 이동하는 기능입니다.

화면 UI 구성이 끝났으면 다음으로 코드를 작성합니다. 먼저 폼의 크기가 변경되면 듀라맵 컴포넌트의 크기도 폼의 크기에 맞춰 조절되도록 폼의 Resize 이벤트를 다음처럼 작성합니다.

Private Sub Form_Resize()
    Xr1.Height = Me.Height
    Xr1.Width = Me.Width
End Sub

다음으로 Connect 버튼의 Click 이벤트를 다음처럼 작성합니다.

Private Sub Command1_Click()
    Dim OK As Boolean
    OK = Xr1.Layers.AddTileMapLayer("basemap", 
        "XrTileMap://geoservice.co.kr/tilemap")
    If OK Then
        Xr1.WaitForAllConnections
        Xr1.ZoomFullExtent
        Xr1.MapScale = Scales(Current)
        Xr1.MouseMode = XrPanMode
    Else
        MsgBox "Error AddTileMapLayer"
    End If
End Sub

다음으로 Zoom In과 Zoom Out 버튼에 대한 Click 이벤트를 작성해야 하는데요. 그전에 다음과 같은 사용할 전역 변수를 선언해야 합니다.

Dim Scales(1 To 12) As Long
Dim Current As Integer

1번 코드는 타일맵의 12단계 축척을 저장할 배열이고 2번은 현재 화면상에 표시하고 있는 축척 단계를 저장하고 있는 변수입니다. 이 변수에 값을 초기화 하는 코드를 폼의 Load 이벤트에 아래와 같이 작성합니다.

Private Sub Form_Load()
    Scales(1) = 3000000
    Scales(2) = 1800000
    Scales(3) = 800000
    Scales(4) = 460000
    Scales(5) = 250000
    Scales(6) = 110000
    Scales(7) = 50000
    Scales(8) = 25000
    Scales(9) = 14000
    Scales(10) = 7500
    Scales(11) = 3500
    Scales(12) = 2000
    
    Current = 1
End Sub

이제 지도 확대와 축소를 위한 버튼의 기능을 작성합니다. 먼저 지도를 확대하는 Zoom In 버튼의 클릭 이벤트를 아래와 같이 작성합니다.

Private Sub Command2_Click()
    Current = Current + 1
    If Current > 12 Then Current = 12
    Xr1.MapScale = Scales(Current)
    Xr1.Update
End Sub

그리고 지도를 축소하는 Zoom Out 버튼의 클릭 이벤트를 아래와 같이 작성합니다.

Private Sub Command3_Click()
    Current = Current - 1
    If Current < 1 Then Current = 1
    Xr1.MapScale = Scales(Current)
    Xr1.Update
End Sub

마지막으로 지도를 마우스 드레깅을 통해 이동하는 Pan Mode 버튼의 클릭 이벤트를 아래와 같이 작성합니다.

Private Sub Command4_Click()
    Xr1.MouseMode = XrPanMode
End Sub

코드에 대한 설명은 거의 하지 않았으나 코드의 구성이 단순하고 명확하여 이해하기 어렵지 않을것으로 생각합니다.