GeoService-Xr과 FingerEyes-Xr의 On-The-Fly-Projection 적용하기

다양한 좌표계가 존재하므로, 사용자마다 자신이 가지고 있는 공간 데이터마다 서로 다른 좌표계를 적용하고 있습니다. 이러한 서로 다른 좌표계의 공간 데이터를 DBMS에 Import할때, 좌표계를 명시해 주고, 이를 사용하는 클라이언트 단에서는 서로 다른 좌표계를 하나의 기준 좌표계로 변환하여 사용하게 됩니다. 그래야 레이어로써의 여러개의 지도가 하나의 지도로 중첩됩니다.

GeoService-Xr과 FingerEyes-Xr에서도 서로 다른 좌표계에 대해 동적으로 좌표계를 변환해 단일 좌표계로 변환해 레이어를 중첩해 주는 On-The-Fly-Projection 기능을 제공합니다. 이를 위해서는 서버인 GeoService-Xr 과 클라이언트인 FingerEyes-Xr에서 간단한 설정이 필요한데요. 이 내용을 정리해 봅니다.

먼저 서버인 GeoService-Xr에서는 DBMS에 저장된 공간 데이터를 GeoData라는 단위로 관리하는데, 이 GeoData를 정의하는 xml 파일의 내용에 EPSG를 설정할 수 있습니다. 아래의 예와 같습니다.


    parcel
    muan_db://public."parcel"
    5186



    link
    network://public."link"
    5179

위의 내용은 parcel이라는 GeoData의 좌표계는 EPSG:5186이고, link라는 GeoData의 좌표계는 EPSG:5179라는 것을 명확히 하고 있습니다.

다음은 클라이언트 단의 코드인데요. 클라이언트 단에서 공통 좌표로 사용하고자 하는 좌표계를 아래처럼 지정하면 됩니다.

map.EPSG(5186);

위의 코드에 의해 클라이언트 단에서 사용하는 단일 좌표계는 EPSG:5186으로써, 만약 서버 단에서 이와 다른 좌표계의 데이터가 오면 이를 EPSG:5186으로 변환하도록 합니다. (명확히는 서버단에서 좌표계 변환을 수행함)

아래의 그림은 서로 다른 좌표계를 가지는 parcel(지적도로 EPSG:5186)와 link(네트워크 링크로 EPSG:5179)가 하나의 단일 좌표계(EPSG:5186)으로 변환되어 정확히 그 위치가 일치되는 것을 보여주고 있습니다.

도로명주소DB의 도로중심선을 활용한 최단거리 기능 소개

도로명주소DB에는 도로중심선이 있습니다. 예전에 도로중심선을 네트워크 DB로 가공하는 글을 포스팅한 적이 있었는데요. 찾으시는 분을 위해 주소를 정리하면 아래와 같습니다.

도로중심선만으로 네트워크 데이터 구축하기 ㅡ 1/3
도로중심선만으로 네트워크 데이터 구축하기 ㅡ 2/3
도로중심선만으로 네트워크 데이터 구축하기 ㅡ 3/3

아울러 이러한 네트워크 DB를 이용하는 알고리즘 중에 하나인 최단경로를 탐색하는 A*에 대해 정리하는 글은 아래와 같습니다.

최단 경로 탐색 – A* 알고리즘

이러한 과거의 작업 내용을 토대로 두 지점간의 최단 경로를 분석해 그 결과를 제공하는 서비스를 개발하였고, 기능에 대한 실행이 아래의 동영상입니다.

사실, 도로명주소DB의 도로중심선만으로 길찾기 서비스를 개발하는 것은 충분하지만, 길찾기 서비스의 품질으로써 도로중심선은 추가적인 보완이 필요합니다. 도보용으로는 적당하지만, 차량용과 같이 보다 더 나은 서비스 개발을 위해서는 나라에서 제공하는 표준 노드/링크 데이터를 활용하는 것을 권장합니다. 그럼에도 도로명주소DB의 도로중심선을 이용한 최단 경로를 개발한 이유는 상수관, 하수관, 가스관, 전력선, 통신선 등과 같은 설비들의 관망 해석에 대한 기반 기술 마련입니다. 이러한 관망은 최단경로라는 의미보다는 어떤 조건을 만족하는 관망을 탐색하여야 하는데, 어떠한 조건에 대한 과제를 “최단거리”라고 정한 것 뿐입니다. A*라는 알고리즘을 이해하고 구현함으로써 이를 응용하고 확장해 어떠한 조건에서의 관망이라도 탐색할 수 있습니다.