RDBMS에 저장된 GTFS 데이터에서 시간표를 작성해 봅니다.

GTFS Advent Calendar 7일째의 기사입니다.
오늘은 RDBMS에 저장된 GTFS 데이터에 대해 SQL 쿼리를 실행하고 시간표를 만드는 절차를 소개하려고합니다.

6일째 기사 에서 작성한 ER 다이어그램을 바라보면, 아무래도 아래의 4개의 테이블의 정보를 조합하면 시간표를 작성할 수 있을 것 같습니다.



바로 SQL 쿼리를 만들어 보겠습니다. 경로 ID( route_id )와 항공편 ID( trip_id ), 그리고 기둥 ID( stop_id )를 각각 조합하게 됩니다. "어느 경로를 달리고 있는 항공편과 그 항공편의 정류장(표주)을 정리한 것이 시간표군요"라는 이야기가 됩니다.
SELECT
   r.route_short_name AS 経路略称,
   r.route_long_name AS 経路名,
   t.trip_id AS 便ID,
   t.trip_short_name AS 便名称,
   t.trip_headsign AS 便行先,
   s.stop_id as 停留所・標柱ID,
   s.stop_name as 停留所・標柱名称,
   st.arrival_time as 到着時刻,
   st.departure_time as 出発時刻
  FROM
    stop_times AS st,
    stops AS s,
    trips AS t,
    routes AS r
  WHERE
    r.route_id = t.route_id
    AND t.trip_id = st.trip_id
    AND st.stop_id = s.stop_id
  ORDER BY
    st.trip_id,
    st.arrival_time
  ;

이 SQL 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있습니다. 왠지 그럴듯한 결과입니다만, 정말로 시간표의 형태가 되고 있습니까?



기타에나 교통 주식회사GTFS 데이터
9:30 에 나카쓰가와역 앞을 출발하여 나카교 대학 입구로 가는 버스를 Google 지도상에서 탐험하고, 그 결과와 앞의 SQL 쿼리의 결과를 비교하면 좋을 것 같습니다.



SQL 쿼리의 결과와 일치합니다. 제대로 시간표를 만들 수 있습니다!

요약



RDBMS에 저장된 GTFS 데이터에 대해 SQL 쿼리를 실행하고 시간표를 만드는 방법을 소개했습니다.
GTFS 데이터는 경로 정보와 항공편 정보, 통과 시간 정보 등의 단위로 파일(CSV)이 나뉘어져 있습니다만, ID를 키로 하여 데이터를 정리(RDBMS적으로는 표 결합)하는 것으로, 비교적 이해하고 쉬운 형태로 데이터를 처리할 수 있을 것 같습니다.

좋은 웹페이지 즐겨찾기