경로탐색 기능 구현을 위한 각 기관의 노드/링크 데이터 비교 파악

 

독자 여러분 안녕하세요 유령개구리입니다. 

본 게시물에서는 각 기관에서 구축 및 배포하고 있는 교통 링크 노드데이터에 대한 설명을 드리고자합니다. 

 

1. 노드/링크 데이터란...?

1) 노드 데이터

    교통 관점에서 노드는 차량이 도로를 주행함에 있어 속도의 변화가 발생되는 지점을 표현한 곳이며 교차로, 교량 시종점, 고가도로 시종점, 
    도로 시종점, 터널 시종점, 행정경계, IC/JC 등의 유형을 갖추고 있습니다.

2) 링크 데이터

    교통 관점에서 링크는 속도 변화의 발생점인 노드와 노드를 연결한 선을 의미하고 실제의 도로를 표현하게 되며 도로, 교량, 고가도로, 지하차도, 터널 
    등의 유형을 갖추고 있습니다.

참고 : 표준노드링크(http://nodelink.its.go.kr/intro/intro02.aspx)

 

2. 교통 노드/링크 데이터

 

필자가 취득한 데이터의 기관은 각각 아래와 같습니다.

 

1) 표준노드링크 (이하 A)

2) 국가교통 DB (이하 B)

 

필자는 다른 개구리들과 최단거리 경로탐색기능 서비스 구현을 진행함에 있어 각 기관으로부터 취득한 노드/링크 데이터를 다루던 중 

각 데이터가 다름을 알 수 있었습니다. 

 

 

3. 데이터 간 차이점

 

1) 구축 기준 

   필자가 조사한 바에 따르면 각 기관은 구축 기준이 달랐습니다. 

   A기관의 경우 대한민국 실제 도로를 기준으로 구축을 하였고 B기관의 경우 네비게이션 데이터를 기준으로 구축하였습니다. 

 

2) 데이터의 형상

   아래 사진은 각 기관에서 취득한 데이터를 오픈소스 GIS프로그램인 QGIS를 활용해 오픈한 모습입니다.

 

* A 기관 노드, 링크 데이터

위 사진들을 보시면 링크 데이터가 양분할되어있는것을 볼 수 있습니다.  

앞서 설명한 것처럼 실제 도로를 기준으로 구축되었기 때문에 양방향 통행에 대한 모습을 확인할 수 있지요.

  

* B 기관 노드, 링크 데이터 

위 사진들을 보시면 A 기관과는 다르게 링크 데이터가 하나의 선으로 구축되어있는것을 확인할 수 있습니다.

 

3) 데이터의 속성

   각 데이터를 오픈소스 GIS프로그램인 QGIS를 활용해 속성 테이블을 보여드리면 다음과 같습니다. 

   

* A 기관 노드 데이터 속성

노드 데이터의 속성 중 TURN_P 컬럼을 보시면 0으로 표기되어있습니다. 하지만 TURN_P 컬럼의 값은 0, 1 둘로 작성되어있죠

값이 "0"이면 일직선 또는 교차점이 아니라는 의미이고 값이 "1"이면 교차점을 의미하게 됩니다. 

 

* A 기관 링크 데이터 속성  

링크 데이터의 속성 중 F_NODE, T_NODE은 각각 시작노드식별자와 종료노드식별자를 구분해놓은것입니다. 즉 하나의 노드 데이터에 각각의 링크가 

연결되어있음을 알 수 있습니다. 

 

* B 기관 노드 데이터 속성

노드 데이터의 속성 중 TURN_INFO 컬럼이 "1"로 표기되어있습니다. 이 컬럼 또한 0, 1 둘로 작성되어있죠. 하지만 A기관의 TURN_P 컬럼과 동일하게 

0, 1로 작성되었을지라도 나타내는 정보는 다릅니다. 

이 데이터의 TURN_INFO 컬럼값은 회전유무를 판단하고 있습니다. 값이 "0"이면 더이상 회전 가능한곳이 없음 즉, 막다른 길임을 나타내고 값이 "1"이면

회전 가능한곳이 있고 진행할 방향이 있다는 의미입니다. 

 

* B 기관 링크 데이터 속성 

링크 데이터의 속성 중 UP_FROM_NO, UP_TO_NODE, DOWN_FROM_, DOWN_TO_NO 4가지의 컬럼을 볼 수 있습니다. 

각 컬럼은 상행시작노드, 상행종료노드, 하행시작노드, 하행종료노드를 의미하고 있고 컬럼 내 값은 링크와 연결된 노드의 ID를 의미하고 있습니다. 

 

* We Choose!!!

필자는 처음에 설명드렸듯  다른 개구리들과 최단거리 경로탐색기능 서비스 구현 중에 있었습니다. 하지만 우리는 B기관의 데이터를 활용하기로 

했습니다. 왜 B 기관의 데이터를 사용했을까요?

우리가 구현 과정에서 사용한 DB는 PostgreSQL이었습니다. 우리가 PostqreSQL을 선택한 이유는 "pgr_dijkstra" 함수를 활용하기위함이었습니다.

 

3. pgr_dijkstra...??

pgr_dijkstra함수는 pg_routing에서 제공하고 Dijkstra 알고리즘을 사용하여 최단 경로를 반환하는 함수입니다. 

* pgr_dijkstra Documents(https://docs.pgrouting.org/2.0/en/src/dijkstra/doc/index.html)

 

우리는 해당 함수를 활용하기 위해 Sample Data를 확인하였습니다.

* pgr_dijkstra Sample Data Documents(https://docs.pgrouting.org/2.3/en/doc/src/developer/sampledata.html#sampledata)

 

* 아래는 Sample Data입니다.

각 노드에 링크가 연결되어있고 노드와 노드 간 이동 방향이 상 하행 양방향으로 표현되어있는것을 볼 수 있습니다. 

 

우리 개구리들은 위 샘플데이터처럼 각 노드에 링크가 연결되어있고 이 링크들이 진행방향과 상 하행을 모두 나타낼 수 있는 데이터가 필요하였습니다.

그렇기에 B 기관의 데이터가 우리가 구현하는 서비스에 좀 더 부합된다는 결정을 내리게된것입니다.

 

이상으로 우리 개구리들이 최단거리 경로탐색 기능을 구현함에 있어 살펴보았던 데이터들과 각 데이터들의 차이점, 형상, 속성 그리고 선택의 이유를 

살펴보았습니다. 

 

 

 

 

 

 

 

+ Recent posts