-
Notifications
You must be signed in to change notification settings - Fork 0
Description
기존 방식
출발 위치와 도착 위치를 입력받고 조건(시간 등)에 해당하는 행들의 경로를 하나씩 그리며 중복되는 경로를 색상으로 표시함
기존 방식의 문제점
OSRM으로 경로를 하나씩 API로 불러와서 표시하기때문에 속도가 느림- 프론트로 넘겨줄때의 모호성
그래서 받아온 모든 데이터를 미리 경로를 계산한 다음 그 경로에 해당하는 edge에 값을 저장해두는 식으로 데이터를 변경해두면 프론트에서 받아쓰기도 쉽고 데이터를 바로 띄우면 되니 서비스 시간도 줄지 않을까? 라는 생각
로직
OSRM 경로
OSRM 과 같은 대부분의 지리정보시스템은 아래와 같이 갈림길에서 Node를 가지고 있습니다.

만약 경로를 요청하게 되면, 출발위치로 부터 가장 가까운 노드를 연결해 나가며 도착위치까지의 최종 경로를 제공합니다.

그래서 모든 데이터의 경로를 미리 계산하면서 경로 상에 있는 노드 상에 인구수를 추가로 더해가며 노드 자체에서 인구수를 나타낼 수 있게 바꾸려 하였습니다.
노드로 변환
우선 raw 데이터의 모든 행을 살펴보며 경로를 계산한 후, 노드로 분리합니다.
해당 노드의 조건을 살펴보며 새로운 csv파일로 변환합니다.
조건은 아래와 같습니다.
일자,출발시간,X좌표,Y좌표를 기준으로 새롭게 계산한 노드가 4가지 열에 중복되지 않는다면 새롭게 데이터를 추가합니다.X좌표,Y좌표는 출발 기준입니다.- 중복된다면 해당 행의
유동인구 수를 더해가며 갱신합니다. - 같은 방식으로 노드의 남성,여성,거주지,성별 정보를 갱신합니다.
변환한 데이터 형식
문제 & 고민
미리 경로에 대한 전처리를 한 후 추가적인 경로계산 없이 바로 프론트에서 띄우는게 맞다고 생각하는데, 현재 방식으로는 Node들을 어떻게 연결해야 할지 고민입니다..
그래서 node 를 저장하는 방식이 아니라 최종적으로는 'edge'를 저장하는 방식이 되어야 할것 같은데 이에 대한 생각 있으시다면 남겨주시길 바랍니다.
또한 어쨋든 경로계산은 해야하므로 전처리에서 OSRM API를 호출해야하는데, 현재 코드로는 시간이 너무 오래걸립니다.. 3만개 데이터 기준 1시간 반

그래서 도커 등 API호출을 빠르게 하거나 다른 라이브러리를 이용할 방법을 찾아야 할것 같다고 생각합니다.



