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

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

공간정보시스템 / 3차원 시각화 / 딥러닝 기반 기술 연구소 @지오서비스(GEOSERVICE)
듀라맵은 작고 가벼운 GIS 엔진으로 빠르고 풍부한 기능을 제공합니다. 수치지도와 항공영상 기반의 지도 표시, 공간 데이터 편집, 지오메트리와 그리드 기반의 공간분석, 통계 데이터의 차트 표시, 좌표변환, 공간 데이터 생성과 같은 기능을 제공합니다.

듀라맵을 활용한 윈도우즈 기반의 GIS 프로그래밍을 위한 개발자 문서입니다. 문서의 다운로드는 다음 URL을 참고하시기 바랍니다.
국가에서 제공하는 많은 오픈된 데이터가 존재합니다. 이러한 오픈된 데이터를 필요로 하는 개인 또는 기업/기관에서 받아 또 다른 형태의 정보로 가공될 수 있습니다. 아래에 소개할 BaseMap-Xr 역시 바로 이러한 예입니다.
향후에 국가에서 공개하는 공간 데이터가 많이 늘어난다고 합니다. 이러한 공개된 공간 데이터를 많은 기업에서 서로 경쟁적으로 활용하고 응용한다는 부분에서 많은 기술 발전이 이루어 질 것입니다. 바로 이러한 기술의 발전의 유도가 공간 데이터를 국가에서 오픈하는 이유이기도 합니다. 국가에서 공간 데이터의 공개 그리고 공유는 이러한 부분에서 매우 긍정적인 정책이라고 생각합니다.
아래의 화면은 오픈 공간 데이터를 이용하여 제작한 배경맵입니다. 전국에 존재하는 모든 건물을 빠짐없이 제공하며 1년에 4번의 업데이트를 통해 최신성을 유지하는 배경맵인 BaseMap-Xr입니다.

BaseMap-Xr은 최신의 배경지도로써 정확하고 풍부한 POI를 제공합니다. GIS 엔진에서 쉽게 사용할 수 있는 타일맵 구조로 되어 있어서 GIS 엔진에 쉽게 적용이 가능합니다. DuraMap-Xr, BlackPoint-Xr, FingerEyes-Xr은 이미 BaseMap-Xr을 기본맵으로 제공하고 있습니다. GIS 엔진과 배경맵을 따로 따로 고려하는 기존의 비효율성과 불편함은 더 이상 존재치 않습니다.

위의 표는 BaseMap-Xr의 제원입니다. BaseMap-Xr을 비상업적인 용도로 활용되는 경우 기술지원 및 활용에 대해서 무상으로 제공드리도록 하겠습니다.
작년에 세계적인 여행가이드 모바일 앱인 론니플래닛에 사용되는 지도 엔진 개발을 의뢰 받아 개발을 진행 했었습니다. 지도 데이터는 오픈스트리트맵(OpenStreet Map)을 사용하기로 하였고 이 지도를 표시하고 론니플래닛에 사용할 맵뷰(지도 엔진) 형태로 제공해 달라는 요청이였습니다. 참으로 힘들게 작업했던 기억이 납니다만…. 저희 (주)지오서비스에서 개발하여 제공한 맵엔진이 적용되어 실제로 구글의 앱장터인 Play 스토어에 등록되어 출시가 되었습니다.

실제로 출시된 버전들중 제가 가장 좋아하는 ‘파리’에 대한 앱의 화면을 몇가지 올려봅니다. 이 앱에서 지도 기능에 대한 화면은 아래와 같습니다.

지도와 정보를 함께 제공하고 있는 화면인데요.. 지도 부분에 대한 내용만을 표시하고 있는 화면은 아래와 같습니다.

개발을 의뢰한 업체는 이미 오픈소스를 검토한 상태였고.. 지도 표출 속도 등의 문제와 라이선스로 인해 오픈소스를 사용하지 않기로 결정하였던 터였습니다. 하지만 지도 데이터는 오픈된 오픈스트리트 맵을 사용하였습니다. 오픈스트리트맵은 공간 데이터를 SHP 형태로 제공하고 있습니다. 이를 받아 지도를 원하는 스타일로 디자인하고 가공하여 타일맵으로 만들어 활용을 하였습니다.
듀라맵은 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
코드에 대한 설명은 거의 하지 않았으나 코드의 구성이 단순하고 명확하여 이해하기 어렵지 않을것으로 생각합니다.
듀라맵이 GEOS 라이브러리를 사용합니다. 공간연산을 위해 사용하는 라이브러리인데.. 공간데이터를 가공하기 위해 듀라맵으로 툴을 만들어 사용하고 있었는데.. 이상한 현상이 발생해서 문제를 쫓다 쫓다.. 쫓다가.. 또 쫓다가.. 쫓다가.. 쫓다가.. 결국 GEOS에서 문제를 발견하여 그 내용을 정리해 봅니다. 나중에 잊을 소지가 다분하므로…
아래와 같은 도형이 있습니다. 사각형 폴리곤 하나와 4개의 포인트라고 할때 이 4개의 포인트는 사각형 폴리곤 가장자리에 정확히 일치해서 놓입니다. 4개는 각각 사각형 폴리곤의 왼쪽 모서리, 오른쪽 모서리, 위쪽 모서리, 아래쪽 모서리에 놓입니다.
사각형에 대한 지오메트리에 대해서 포인트 1, 2, 3, 4에 대해 intersets 연산을 수행하면 희한하게도 1과 2는 intersets가 false를 반환하고 3과 4는 true를 반환합니다. 제가 사용하는 GEOS의 버전이 3.2.2인데.. 오늘 오랜만에 GEOS의 공식 배포 사이트에 보니 올해 1월말에 3.3.7로 올랐군요. 아마도 분명… 새로운 버전에서는 이러한 문제가 해결되었다고 생각합니다. 언제 시간을 내서 GEOS의 새로운 버전으로 변경해서 듀라맵을 배포해야겠습니다.