GTFS作ってみた
2019-06-14
azblob://2022/11/11/eyecatch/2019-06-14-tried-to-make-gtfs-000-e1560754880354.jpg

こんにちは、GTFSというもののフォーマットに悩まされている石川です。あるプロジェクトでGTFSが必要となったのですが当該地域のものは公開されておらず、どうしようもないので自前で作ってみました。

はじめに - GTFSとは?

GTFS(General Transit Feed Specification)とは公共交通機関の時刻表と地理情報(緯度経度)に関するデータのオープンフォーマットです。具体的には電車であれば駅情報、バスであればバス停の位置の情報と時刻表をまとめたものになります。地方自治体や交通事業者がオープンデータとして提供しているものもこのフォーマットに沿ったものとなります。

また、大きな特徴として、Google Transit APIが完全対応しているという点があります。

つまり、このフォーマットで公共交通機関情報を作ってGoogleへ提供すれば、Google Map等から呼ばれているGoogle Transit APIに交通情報を登録することができるわけです!(地方自治体か交通事業者じゃないと承認されなそうですが)

なぜ作ったの?

プロジェクトの一環で、OpenTripPlannerを使うことになり、ものの見事にオープンデータがなかったからです。

OpenTripPlannerについてはこちら

GTFSのフォーマット

GTFSのフォーマットは

複数のテキストファイル(拡張子はtxt、中身はcsv)がzipで圧縮された形式

となっています。 さらに驚くべき点があり、

csvのキー同士でリレーションが存在する

という点です。

初めて目にしたこの形式に言葉を失いました。

「もうデータベース作っちゃえばいいんじゃね?」 (数分後に出てきた言葉)

配布公開といった点を考えるとこうするしかなかったんでしょうね…

これがあればGTFS!(最小限構成で作るGTFS)

ということでGTFSを作っていきます。

ファイルやcsvのキーの中には任意なものがいくつかあるため極力最小構成で手間をかけずに作ってみます。

最小限となるファイル構成は

- agency.txt (事業者情報)
- calender.txt (営業日情報)
- routes.txt (経路情報)
- stops.txt (停留所(駅, バス停等)情報)
- stop_times.txt (停留所毎の時刻表情報)
- trips.txt (便情報)

となります。

複数の交通機関、事業者、便がそれぞれのファイル1つにまとまってます。csvで。地獄

次にそれぞれのファイルのキーを見ていきます。

- agency.txt
  - agency_id (事業者ID)
  - agency_name (事業者名)
  - agency_timezone (事業者のタイムゾーン)
  - agency_lang (事業者の言語)
- calender.txt
  - service_id (営業日ID)
  - monday (月曜日に適用するか(1/0))
  - thuesday (火曜日)
  - wednesday (水曜日)
  - thursday (木曜日)
  - friday (金曜日)
  - saturday (土曜日)
  - sunday (日曜日)
  - start_date (適用開始日)
  - end_date (適用終了日)
- routes.txt
  - route_id (経路ID)
  - agency_id (事業者ID)
  - route_short_name (経路の短縮名称)
  - route_long_name (経路の正式名称)
  - route_type (交通機関の種類)
- stops.txt
  - stop_id (停留所ID)
  - stop_name (停留所名)
  - stop_lat (停留所の緯度)
  - stop_lon (停留所の経度)
  - zone_id (運賃エリア)
  - location_type (のりば, おりば, 代表点かの情報)
  - parent_station (のりば, おりばの場合代表点のstop_id)
- stop_times.txt
  - trip_id (便ID)
  - arrival_time (到着時刻)
  - departure_time (出発時刻)
  - stop_id (停留所ID)
  - stop_sequence (停止順)
- trips.txt
  - route_id (経路情報)
  - service_id (営業日ID)
  - trip_id (便ID)
  - direction_id (上り, 下りの指定)

おわりに

GTFSというものを初めて見た方も多いのではないかと思います。こんなものがあるんだな程度に知っておくと、 何かあったときに 役に立つかもしれません。

最後に作ったファイルをお見せして終わります。

このファイル確認したら3路線しか入れてないのに4000行超えてました。   うーん、地獄。

それでは。