대중교통 경로 제공 서비스 현황
네이버 지도
[그림 1]은 출발점으로 숭실대학교를, 도착점으로 낙성대역 2호선을 입력한 네이버 지도의 경로 검색 화면이다. 이용자는 출발 시각을 직접 설정할 수 있으며, 대중교통을 활용한 다양한 경로들을 제공받는다. 그러나 출발 시각별 강수량 정보와 도보 경로에서의 강수량 정보가 제공하지 않고 있다. 또한, 대중교통 경로는 여러 경로가 제공되는 반면, 해당 경로에서 도보 경로들은 단일 경로로 제공되고 있다.[그림 2]는[그림 1]에서 최적 경로를 선택하였을 때 보여지는 상세 경로 화면이다.[그림 1]에서 선택한 경로의 상세 정보와 출발점에서 도착점까지의 경로가 지도에 표현되어 있지만, 도보 경로에서 예상되는 노출 강수량과 기상 정보가 제공되지 않음을 확인할 수 있다. 추가로, 네이버 지도는 교통 정보, 자전거, 등산로, CCTV, 실내지도 그리고 현재 위치에서 향후 6시간 동안의 기상 정보를 1시간 간격으로 제공한다.
카카오맵
[그림 3]은 출발점으로 숭실대학교를, 도착점으로 낙성대역 2호선을 입력한 카카오맵의 경로 검색 화면,[그림 4]는[그림 3]과 동일한 대중교통 경로를 선택했을 때 보여지는 상세 경로 화면이다. 카카오맵 역시 네이버지도와 마찬가지로 출발 시각에 따른 강수량 정보, 도보 경로에서의 강수량 정보를 제공하지 않고 있으며, 단일 도보 경로만 제공하고 있다. 또한, 도보 경로에서 예상되는 노출 강수량, 기상 정보 역시 제공되지 않고 있다. 카카오맵 에서는 교통 정보, CCTV, 초정밀 버스, 자전거 도로, 그리고 ‘구’ 별 미세먼지 농도를 제공하고 있다.
길찾기 애플리케이션 기능 비교 표
- 위 표는 네이버 지도, 카카오맵, TMAP 그리고 Google Maps 길찾기 애플리케이션들이 제공하는 기능을 비교한 것이다. 실시간 기상 정보는 네이버 지도, Google Maps만 지원하 고 있으며 구간별 기상 정보는 모든 애플리케이션이 지원하지 않고 있다. 또한, Google Maps은 대중교통 경로 내 도보 경로를 제공하지 않으며, 나머지 애플리케이션들 역시 도보 경로를 제공하고 있기는 하지만 하나의 최적 경로에만 한정되고 있다.
ODsay를 선택한 이유
대중교통 경로 Open API로는 TMAP 대중교통, ODsay 그리고 공공데이터 포털에서 제공하는 서울특별시_대중교통환승경로 조회 서비스가 있다. 이 서비스들은 모두 출발점과 도착 점의 경위도 좌표를 기반으로 대중교통 경로를 제공한다.
그 중 프로젝트가 추후 수도권, 전국으로 확장될 수 있다 판단하여, 서울시 대중교통만 지원하는 공공데이터 포털의 서비스는 탈락했다. 또한, 내비게이션 앱들 중 압도적으로 점유율이 높은 TMAP에서 지도도 지원하고 대중교통API도 지원하길래 사용하려 했으나 ‘집(덕소) → 학교(숭실대 정보과학관)‘를 테스트 했을때 난생 처음 보는 경로를 안내해줬다.
TMAP 대중교통은 이외에도 한번씩 이상한 비효율적인 경로를 안내해줬고 결국 탈락했다. 한편, 하루 1,000건, 6개월이나 무료로 지원해주는 ODsay 대중교통 길찾기 API는 준수한 성능을 보여줬다.
ODsay 대중교통 API 요금제 유형
참고로 ODsay는 대중교통 경로 내 도보 경로는 제공해주지 않고 소요시간, 거리만 안내하지만, TMAP 대중교통은 도보경로까지 자세하게 안내해 준다. 하지만 이미 본 프로젝트의 목표중 하나인 비를 덜 맞는 대중교통 경로(뽀송길) 안내를 달성하기 위해 자체적으로 라우팅 알고리즘을 커스텀할 수 있는 OSRM(Open Source Routing Machine)을 활용하여 도보 경로를 안내하기로 했었다. 따라서 도보 경로 지원 여부는 중요하지 않았고 뽀송길 프로젝트에서의 대중교통 API는 ODsay로 결정했다.
ODsay 구현 내용
ODsay(대중교통) ERD
- 경로 (Path) : 대중교통 경로
- 경로 아이디 (path_id) : 경로의 아이디
- 요청자 아이디 (requester_id) : 경로를 검색한 사람의 아이디
- 요금 (price) : 해당 대중교통 경로로 이동할때 부과되는 요금
- 총 시간 (total_time) : 해당 대중교통 경로로 이동할 때 소요되는 시간
- 총 거리 (total_distance) : 해당 대중교통 경로로 이동하는 거리
- 총 도보시간 (total_walk_time) : 해당 경로 내 도보경로로 이동하는 총 시간
- 총 도보거리 (total_walk_distance) : 해당 경로 대 도보경로로 이동하는 거리
- 예상 강수량 (total_rain) : 해당 대중교통 내 도보 경로로 이동할 때 노출되는 강수량의 합
- 버스 환승 수 (bus_tranist_count) : 해당 대중교통 경로 내 버스 이용 횟수
- 지하철 환승 수 (subway_transit_count) : 해당 대중교통 경로 내 지하철 이용 횟수
- 총 환승 수 (total_trainsit_count) : 버스, 지하철 이용 횟수의 합
- 버스 정류장 수 (bus_station_count) : 버스로 이동하는 정류장 수
- 지하철 정거장 수 (subway_station_count) : 지하철로 이동하는 정거장 수
- 출발지 정보 (start) : 사용자가 입력한 출발지 위치 정보
- 도착지 정보 (end) : 사용자가 입력한 목적지 위치 정보
- 중간지점 정보 (mid) : 출발지와 도착지 중간의 위치 정보, 카카오맵에 경로를 시각화할 때 중심 좌표로 사용한다
- 서브 경로 (SubPath) : 이동수단(버스, 지하철, 도보)에 따른 대중교통 경로내 서브 경로
- 서브 경로 아이디 (sub_path_id) : 서브 경로의 아이디
- 경로 아이디 (path_id) : 서브 경로가 속한 경로의 아이디
- 타입 (type) : 버스, 지하철, 도보
- 거리 (distance) : 서브 경로로 이동하는 거리
- 소요시간 (time) : 서브 경로로 이동하는 시간
- 정거장 수 (station_count) : 버스 or 지하철로 이동하는 정거장 수
- 지하철 노선도 이름 (subway_name) : 지하철 노선의 이름
- 지하철 색코드 (subway_color) : 지하철 노선의 색 코드
- 버스 번호 (bus_num) : 버스 번호
- 버스 색코드 (bus_color) : 버스의 색 코드
- 출발지 정보 (start) : 해당 서브 경로의 출발지 위치 정보
- 도착지 정보 (end) : 해당 서브 경로의 도착지 위치 정보
- 중간지점 정보 (mid) : 해당 서브 경로의 중간 지점 위치 정보
- 구간점 (Point) : 서브 경로에서 이동하는 지점, 카카오맵에 시각화된 서브경로의 선을 구성하는 점이다.
- 구간점 아이디 (point_id) : 구간점 아이디
- 서브 경로 아이디 (sub_path_id) : 구간점이 속한 서브 경로 아이디
- 구간점 정보 (point_info) : 구간점의 정보(이름, 위도, 경도, 기상청 격자)
- 구간점 위치 정보(PointInformation) : 구간점 정보의 임베디드 타입
- 이름 (name) : 구간점의 장소명 (NULL 가능)
- 위도 (latitude) : 구간점의 위도
- 경도 (longitude) : 구간점의 경도
- x (x) : 구간점을 기상청에서 정의한 격자의 x좌표로 변환한 값
- y (y) : 구간점을 기상청에서 정의한 격자의 y좌표로 변환한 값