帷子川書房日誌

興味がいろんなことに散らかってる人のブログ。

横浜市営バス trip_id の歩き方

【本内容は、公共交通オープンデータセンターにおいて提供されるデータを使用およびその内容に沿って書いています】
www.odpt.org

【データフォーマットは GTFSリアルタイム v2.0 / データ構造は gtfs-realtime.proto を使用しています】
《動的バス情報フォーマット(GTFSリアルタイム)ガイドライン
www.gtfs.jp

【上記以外の部分はすべて管理人の独自研究によるもののため、誤りやアップデートによる仕様相違を含む可能性があります。問い合わせ等は管理人までご連絡ください。】


 色々勢いでやってきたけどそろそろ整理しておかないと将来の自分が困りそうになると感じたので少しずつ文字化を。本当は体系立てて全部書ければ良いんだけど時間に制約があるし、それなら書けるところから書いてあとでまとめればいいんじゃないのというコンセプト。無理せずのんびりやりたいところ。


 ということで横浜市交通局 横浜市営バスのGTFS-RTやGTFS-JPで取得出来るデータから、trip_id のお話。
GTFS-RTはリアルタイムデータ、GTFS-JPは静的データで、それぞれにさまざまなデータが詰まっています。
その中でも最も重要と言っても過言ではないのが trip_id 。日本語訳するとなんでしょうね。行路IDでしょうかね。
trip_id は単一のトリップインスタンスに設定され(ると書いてあり)ます。trip_id はそういう名前なだけで、その中身は事業者ごとに違うはずです。
(「はず」というのは、横浜市交通局以外の GTFS-xx を触ったことがないので…。)

普通に考えると「枠は用意してあるので事業者ごとに好きなのを設定する」のがあり方としては正しそうな気がします。
なので、横浜市交通局横浜市営バスの GTFS の trip-id に限定した話で進めていきます。

例のために2つほどtrip_idを出します。作為的に抽出しました。

① 29204_03202112298059A00308
② 10708_10202112296107PC00102

こんな感じで設定されていますので、まずはこれを読み解かないと始まりません。(公式の定義は公開されていません)
この文字列内に様々なデータがありますが、ほぼ固定長というか一部可変長で扱うのが簡単です。(めんどくさいので固定長にしてほしかった。)

横浜市営バスのマニアの人なら手当たり次第区切っていくうちに行路に関係あるデータを想像していくとなんとなく当てはまってることかと思います。
ということでまずは①をバラします。

292 04 _ 03 20211229 8 059 A 003 08

こうなります。それぞれ解説していきます。名称はこのサイトでの便宜上のものです。

  • 292 … 3桁。系統番号。
  • 04 … 2桁。子系統番号。系統番号と合わせた系統パタン(5桁)は静的データに定義あり。
  • _ … 1桁。アンダースコア固定
  • 03 … 2桁。営業所コード。静的データに定義あり。
  • 20211229 … 8桁。ダイヤ改正日 (yyyyMMdd)。
  • 8 … 1桁。曜日コード。
  • 059 … 3桁。交番(系統)
  • A … 1~2桁。交番(種別)
  • 003 … 3桁。交番(通番)
  • 08 … 2桁。山の連番

系統番号と子系統番号は繋げるとお馴染みの系統パタン(5桁)になります。子系統番号を00=A,01=A,02=B,03=B,04=C,... と変換してやると、子系統記号が出来上がります。今回は "29204" なので "292C"。292系統Cですね。

営業所コードは2桁で各営業所+本局が定義されています。上の例でもわかりますが、03は浅間町、10は港南です。詳細は静的データへ。

曜日コードは「ダイヤ/交番一覧」でも使っていますが、1~9が設定されます。
1=平、2=土、3=休、がほぼ固定で、4以降は特別ダイヤのときに使われているようです。
4と7が特平、5と8が特土、6と9が特休、で使われることが多いです。
夏休みの夏季ダイヤや年末年始は恒例ですが、2021年のオリンピックに関して「港町(仮設)」停留所を使用した迂回運転の際も期間中は4以降の曜日コードが使われていました。

交番は3つまとめると馴染みのある 059A003 になったりします。0埋めされた 59A3 ダイヤです。
厄介なことに、②のパターンがここで登場します。数字はゼロ埋めするのに種別記号は長さ可変なので、A,P,Mダイヤなどのときは記号が1桁になり、AC,PC,AO,POみたいなときは記号が2桁になります。それに伴って trip_id の長さも変わります。
A=01、AC=02、P=03、PC=04、みたいなコード体系もあるらしいのですが、オープンデータでは使用していないのでここでは除外します。

山は起点から終点までの1運行を表します。車庫から始発停留所までも1山です。そういうところは回送コードが設定されていますね。
ダイヤ/交番一覧で横浜駅前着だと山番号が2つ飛んでいるところがあるのですが、これはおそらく内部的には「横東→横東BP」と「横東BP→横東」の2つが設定されていると思われます。

突然ですがここでスタフを見てみましょう。たまたま手持ちにあったものを例にしますので系統は全然違いますが、それぞれこんな感じで該当します。

はいこれで trip_id は攻略できました。

余談ですが、ダイヤ/交番一覧ではページ内リンクや直リンのために、trip_id から取得できる値を使ってユニークな id 設定をしています。便利ですね。


関連リンク:
katabira.hatenablog.com

横浜市営バス ダイヤ/交番一覧