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

단순 선형 데이터인 도로중심선을 이용해 노드와 링크 DB를 생성하기 위한 툴을 DuraMap-Xr을 이용해 개발하였습니다. 아래는 해당 툴의 화면입니다.

이 툴을 이용해서, 입력된 도로중심선에 대해 생성된 Node와 link 데이터를 표현해 보면 아래와 같습니다. 먼저 입력된 도로중심선입니다.

위의 도로중심선이 아래처럼 노드와 링크 데이터로 분리되어 생성됩니다.

생성된 노드 DB에 대한 속성 데이터는 아래와 같습니다. 노드에 표시된 숫자는 각 노드에 연결돈 링크의 개수입니다.

그리고 링크 DB에 대한 속성 데이터는 아래와 같습니다.

그러나 위의 노드와 링크에 대한 SHP 파일만을 가지고는 최단 경로 찾기에 대한 알고리즘(A*)을 효율적으로 적용하기 어렵습니다. 특히 Link에 대해서는 빠르고 효율적인 Node 참조가 가능 수 있도록 SQLite와 같은 DBMS에 저장해 둘 필요가 있으며 이러한 목적으로 아래와 같은 툴을 사용하여 Link에 대한 데이터를 SQLite 파일로 생성할 수 있습니다.

위의 SQLite 파일안에는 Link 테이블이 존재하며 Link에 대한 SHP 파일 중 도형 정보 이외의 속성정보를 그대로 가지고 있습니다. 또한 LinkID와 StartNode 그리고 EndNode에 대한 인덱싱 정보를 가지고 있어서 빠른 Query가 가능합니다. 이로써 최단 경로 알고리즘에서 사용하기 위한 기본적인 노드, 링크에 대한 데이터 파일이 준비되었습니다.

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

도로중심선에 대한 SHP 파일을 통해 노드와 링크 데이터로 구성된 네트워크 데이터를 구축하고자 합니다. 이 목표를 이루기 위해서 3단계의 과정으로 나눠 정리를 하였습니다. 추후 이 3단계 과정을 실제 구현하여 실제로 네트워크 데이터를 구축할 것이고, C# 또는 Java언어를 통해 출발점과 종착점에 대한 최단 거리를 얻을 수 있는, 프로그램에 쉽게 적용할 수 있는 라이브러리를 만들 것이고, 이 라이브러리를 통해 기존의 GIS 엔진중 공간서버와 모바일 GIS 엔진에 최단거리에 대한 기능을 추가할 것입니다.

앞서 3단계의 과정을 언급하였는데요. 먼저 1단계입니다. 아래 그림을 통해 설명하면…

좌측 그림은 원래의 도로중심선입니다. 3개로 구성되어 있습니다. 이해를 돕고자, 폴리라인이 떨어져 보이도록 표시했는데, 붙어 있다고 생각하시기 바랍니다. 결국, 1단계를 거치게 되면 우측처럼 6개의 폴리라인으로 분리됩니다. 즉, 폴리라인의 모든 교차점은 잘려진다가 바로 1단계의 결과입니다. 다음은 2단계를 설명하기 위한 그림입니다.

위의 그림에서, 좌측은 원래의 도로중심선입니다. 2개의 폴리라인으로 구성되어져 있는데, 떨어져 보이도록 구성했으나 원래는 붙어 있다고 생각하시기 바랍니다. 결국, 2단계를 거치게 되면 우측처럼 1개의 폴리라인으로 합쳐집니다. 즉, 단 2개의 폴리라인만이 양 끝지점에서 교차할 경우 하나의 폴리라인으로 만든다가 2단계의 결과입니다. 다음은 마지막 3단계에 대한 설명을 위한 그림 3개 입니다.

위의 그림은 이 글의 가장 처음에 등장한 1단계에서의 그림에서 우측에 해당하는 그림으로 노드는 빨간색 원으로 표기했고, 링크는 노란색 원으로 표기한 것입니다. 총 7개의 노드와 6개의 링크로 구성되어져 있습니다. 어떻한 경우이든 1단계와 2단계를 거친 결과가 바로 아래의 그림이라는 점입니다. 이 그림을 통해 노드와 링크에 대한 테이블에 대한 정보는 아래와 같은데, 먼저 노드에 대한 테이블 정보입니다..

다음은 링크에 대한 테이블 정보입니다.

여기서 한가지 더, 선택적으로 고려해야할 부분이 있습니다. 즉, Undershot 문제인데요. 아래의 이미지를 먼저 살펴보시기 바랍니다.

Undershot이란 위의 이미지에서 왼쪽처럼, 두개의 폴리라인이 만나야 하지만 편집자의 실수로 약간 이격이 발생한 경우입니다. 이때 프로그램으로 이 이격을 제거해주는 작업이 필요합니다.

위 2개의 노드와 링크에 대한 테이블 정보를 통해 최단거리를 얻기 위한 알고리즘의 입력값이 준비된 셈입니다.

마크 저커버그가 딸에게 보내는 편지의 내용 중 ..

사용자 삽입 이미지

“신문은 늘 잘못된 것들로 가득차 있지만 실제로는 그렇지 않단다. 세상은 조금씩 나아지고 있단다. 수명은 늘어나고, 빈곤은 줄어들며, 지식은 늘어나고 있지. 그리고, 세상의 사람들은 서로 연결되고 있단다. 기술의 발전 덕분에 아마 너는 우리보다 훨씬 더 나은 세상에서 살아가겠지.”

남들이 말해서라거나, 또는 스스로 조금 격은 것을 통해 세상 전부를 부정적으로 일반화시켜 버리는 사람들이 많아질수록, 마치 전염병처럼 세상은 정말 부정적으로 병들어 가는 것이다. 내가 이런 사람이였다면 여기까지만, 앞으로는 그만.

덧글, 2023년 12월 : 저커버그는 결국 돈에 눈이 멀어 맛이 가 버렸다.

주소를 좌표로, GeoCoder-Xr with Kakao, Naver, Google ㅡ 2016, v3.2

개 선 내 용

  • 최신 OpenAPI 반영 및 OpenAPI Key 값을 저장할 수 있도록 하였습니다 ㅡ 2016/01/03
  • 결과 SHP 파일을 상대경로로 지정할 경우에 대한 문제점을 개선하였습니다 ㅡ 2013/12/09
  • 지도 표시 창이 나타날때 다운되는 현상 제거하였습니다 ㅡ 2013/06/10

옛날 주소 또는 새주소를 X,Y나 경위도와 같은 좌표로 변환해 주는 기능을 지오코딩(Geocoding)이라고 합니다. 이 툴은 주소를 좌표로 변환해 주는 툴로써 기존의 GeoCoder의 기능을 개선한 버전(3.0)입니다. 많은 주소를 자동으로 손쉽게 변환할 수 있는데, 변환하고자 하는 주소의 목록은 엑셀을 통해 쉽게 만들 수 있습니다.

아래의 그림은 컴마(,)로 구분된 입력 데이터를 엑셀에서 불러온 것입니다. 엑셀에서 만들어진 주소를 포함하고 있는 데이터를 CVS 형식으로 저장하게 되면 바로 좌표로 변환할 수 있는 입력 데이터가 됩니다. 입력 데이터는 반드시 첫줄에 필드명으로 구성되어야 합니다.

사용자 삽입 이미지

결과 좌표 데이터를 SHP 뿐만 아니라 텍스트 파일로 저장할 수 있습니다.
변환된 결과 좌표는 지도 위에 표시됩니다. 변환에 실패한 주소(일반적으로 잘못된 주소임)를 별도의 파일로 저장해 놓을 수 있습니다. 이는 텍스트 파일로 저장하기 옵션이 활성화 되어 있을 경우에 가능합니다.

엑셀 등을 통해 얻은 주소 데이터를 아래의 그림에서처럼 불러와 좌표로 변환할 수 있습니다. 주의할 점은 주소값에 대한 필드를 반드시 지정해야 합니다.
아래의 그림은 OnSpatial에서 제공하는 우리나라 전국의 관공서에 대한 주소목록입니다.

사용자 삽입 이미지

좌표 변환이 완료되면 변환된 좌표가 실제 지도 상에 어디에 분포되는지 파악할 수 있도록 아래 그림처럼 지도 위에 맵핑되는 기능을 제공합니다. 이 기능은 좌표 변환이 완료되면 자동으로 나타납니다.

사용자 삽입 이미지

또한 지도가 표시되는 상태에서 상단에 직접 주소를 입력하고 찾기 버튼을 클릭하면 해당 위치로 지도가 이동됩니다.

사용자 삽입 이미지
이 프로그램에서 주소를 좌표로 변환하는 기능은 네이버, 다음, 구글의 OpenAPI를 활용하였습니다.  OpenAPI는 Key 방식의 라이센스를 통해 사용할 수 있습니다. 이 프로그램은 기본적인 라이센스 키를 가지고 작동되지만 혹… 작동상에 문제가 있을 경우 라이센스 키를 발급받아 사용하시기 바랍니다. OpenAPI에 대한 키(라이선스)를 받기 위한 방법은 아래 URL을 통해 살펴보시기 바랍니다.

또한 SHP 파일로 저장하기와 지도 표현 기능은 지오서비스의 듀라맵을 이용하였으므로 이 프로그램을 실행하기에 앞서 듀라맵의 최신버전(3.8 이상)을 먼저 설치하셔야 합니다. 듀라맵은 다음 URL을 통해 다운로드 받으실 수 있습니다.


끝으로 이 프로그램에 대한 실행 파일은 다음 URL을 통해 다운로드 받으실 수 있습니다. (압축이 풀리지 않을 경우 AlZip이나 7Zip과 같은 전용 압축 프로그램을 이용하시기 바랍니다.) 사용해 보시고.. 문제점이나 개선점 그리고 궁금하신 것은 언제든 메일을 통해 문의하시기 바랍니다.. ^^