GTFS への Google 乗換案内拡張機能

はじめに

Google 乗換案内チームは、継続的に GTFS 仕様を改善しながらパートナーのニーズに対応しています。Google マップの乗換案内に送信するフィードでパートナーが利用できるいくつかの拡張機能について、GTFS 仕様へ追加するよう提案されています。以下で、追加が提案されている機能をご確認ください。

GTFS 仕様の拡張について独自の提案がある場合は、公式 GTFS の変更プロセスをご覧ください。

特定の料金での最大乗換回数

1 つのフィードで複数の交通機関の料金属性をサポートするため、次の拡張機能が提案されています。

fare_attributes.txt

フィールド名 必須 詳細
transfers 任意 Google 乗換案内では 0~5 の値を受け付けます。GTFS 仕様では 0~2 の値を指定できるようになっています。このフィールドで、該当の料金で乗換可能な最大回数(ブロック乗換を除く)を設定します。

その他のルートタイプ

現在、GTFS では、特定のルートの運行タイプ(バス、電車、フェリーなど)を表すルートタイプが複数定義されていますが、より多くのルートタイプをサポートするため、routes.txt の route_type フィールドの拡張機能が提案されています。詳しくは、拡張された GTFS のルートタイプをご覧ください。

駅の車種

特定の駅で運行している車種を指定するための拡張機能が提案されています。

stops.txt

フィールド名 必須 詳細
vehicle_type 任意

このフィールドでは、停車地で使用する輸送手段のタイプを指定します。Google が提案した拡張された GTFS のルートタイプ値など、routes.txt の有効な route_type 値を使用できます。

旅程の迂回

通常以外のスケジュールで運行する旅程や、特別なイベントや計画的な運行止め(線路工事など)によって通常のルートを迂回する旅程を示すことができると便利です。このような例外的な運行を示すために、trips.txt の拡張機能を提案しています。

trips.txt

フィールド名 必須 詳細
exceptional 任意

特別なイベントのための増便や、計画的な運行止め(線路工事)により通常ルートを迂回する運行など、例外的なサービス状況を示すには、このフィールドを 1 に設定します。通常運行の場合は、このフィールドを 0 に設定します。

翻訳

複数の公用語が使用されている地域では、交通機関は通常、名称やウェブページを言語別に使い分けています。このような地域で乗客に最良のサービスを提供するには、GTFS フィードで言語依存値を指定すると便利です。

GTFS-Translations

新しい GTFS-Translations フォーマット(詳しくは bit.ly/gtfs-translations をご参照ください)の利用をおすすめしています。この仕様では、フィードに translations.txt ファイルを 1 つ追加するだけです。古い Google Translations(以下で説明)の仕様とは異なり、他のファイルに変更を加える必要がありません。これにより、GTFS-Translations は GTFS を利用するアプリケーションが translations.txt ファイルを無視する場合でも、完全な互換性を保てます。

Google Translations

GTFS-Translations の数年前に開発された Google 独自の翻訳フォーマットをご利用の場合、Google ではこの古い仕様も引き続きサポートしています。GTFS ファイルを古い Google Translations から新しい GTFS-Translations にアップグレードするためのスクリプト upgrade_translations.py がありますので、ご利用ください。

古い Google Translations では、コンテキスト依存の翻訳が必要な場合にメインファイル(stops.txt など)に変更を加える必要がありました。たとえば、同じ名前でも別の停車地では異なる方法で翻訳する必要がある場合は、stops.txt ファイルで代理の stop_name 値("stopname-3618321864" など)を使用する必要がありましたが、新しい GTFS-Translations ではその必要がありません。

translations.txt

フィールド名 必須 詳細
trans_id 必須

これは URL 内の値、または
フィード内の人が読めるテキスト フィールドを照合するために使用します。通常、翻訳の対象となるフィールドは末尾が「_name」、「_desc」、「_headsign」、「_url」となっているものです。

lang 必須

翻訳後の言語の BCP 47 コード。言語コードを指定する方法について詳しくは、HTML と XML における言語タグ正しい言語コードの選び方をご覧ください。

translation 必須 指定の言語で翻訳された値。フィードの内容が
lang フィールドで指定した言語で表示される場合は、
trans_id に一致する値がこのフィールドで指定した値に置き換えられます。

次は、簡単な例です。

trans_id, lang, translation
Hospital, fr, Hôpital
Hospital, en, Hospital
stopname-3618321864, en, Eiffel Tower
stopname-3618321864, fr, Tour Eiffel
http://www.example.com/, fr, http://www.example.com/fr.html

最初の行は、フィードのデフォルトの言語(agency.txt 内の agency_lang で定義)で記述された人間が読める形式の名前を別の言語に翻訳する際に、ファイルがどのように機能するかを示しています。translations.txt でデフォルトの言語での名称を trans_id として指定した場合は、2 行目のように、デフォルトの言語を翻訳した名称も指定しておく必要がありますのでご注意ください。また、ここでは値全体だけを翻訳するようにします。つまり、「Hospital」という名前の停車地と一致しますが、「Central Hospital」という名前の停車地には一致しないようにします。

4 行目と 5 行目は、精度を高めるためにフィード内で抽象値を使用した例です。このケースでは、フィードの stops.txt ファイルに「stopname-3618321864」という stop_name 値が含まれていると考えられます。この停車地は、英語のインターフェースでは「Eiffel Tower」、フランス語のインターフェースでは「Tour Eiffel」と表示されます。

最後の行は、翻訳版の URL を指定した例です。多言語に対応している交通機関はランディング ページを複数の言語で提供する傾向があります。この設定を基に、Google では停車地やルートに関する詳細を調べるためにクリックしたユーザーに適切なページを表示できるようになります。

ルート間や旅程間の乗り換え

GTFS 仕様では、交通機関が transfers.txt ファイルを使用して乗り換えの意味規則を定義できるようになっており、推奨乗換、接続乗換、限定乗換などの機能がサポートされています。現在のところ、これらの乗り換えは停車地のみに適用されていますが、ルートレベルや旅程レベルでより詳細な乗換情報を指定したいとのご意見が、多数の交通機関から Google に寄せられています。そこで、Google ではこれらの交通機関と協力して、ルート間や旅程間の乗換モデルの作成について提案し、GTFS コミュニティからのご意見を受け付けています。

目的

Google では、ある停車地の組み合わせに対して特定のルート間または特定の旅程間の乗り換えを指定できるようにして、その停車地の組み合わせのすべての旅程に対して同じ乗り換えを指定しなくても済むようにしたいと考えています。

以下にその事例を示します。

  • 2 つの旅程が同じホームに到着して、相互の乗り換えが可能な場合は、この 2 つの旅程間で接続乗換が可能であると指定できるようにします。ただし、この駅の他の乗り換えについては、接続乗換が可能であると指定できないようにします。

  • 最大 30 分間遅れることがよくある電車で、この電車の予定される到着時刻から乗り換え電車の出発時刻までの間隔が 35 分以下の場合、この電車からは他の電車への乗り換えを指定できないようにします。

詳細

transfers.txt に 4 つのフィールド(すべて省略可能)を追加します。

  • from_route_id
  • to_route_id
  • from_trip_id
  • to_trip_id

routes.txt で指定した route_id を from_route_idto_route_id フィールドで指定して、乗り換えの適用対象を絞り込むことができます。from_route_id を指定した場合は、ある from_stop_id から到着する旅程のうち、指定されたルート ID の旅程のみに乗り換えが適用されます。to_route_id を指定した場合は、ある to_stop_id に向けて出発する旅程のうち、指定されたルート ID の旅程のみに乗り換えが適用されます。

from_trip_idto_trip_id フィールドには、trips.txt で指定した trip_id を指定できます。from_trip_id を指定すると from_route_id は無視され、to_trip_id を指定すると to_route_id は無視されます。from_trip_id を指定した場合は、ある from_stop_id から到着する旅程のうち、指定された旅程 ID の旅程のみに乗り換えが適用されます。to_trip_id を指定した場合は、ある to_stop_id に向けて出発する旅程のうち、指定された旅程 ID の旅程のみに乗り換えが適用されます。.

乗り換えの特異性

一部の乗り換えは、他の乗り換えよりも特異性が高い場合があります。Google では、乗り換え適用するタイミングを特定するためのシンプルな順位付けのメカニズムを定義したいと考えています。乗り換えの「特異性」についての定義は、次のとおりです。

乗換元の特異性は、from_stop_id のみが指定されている場合は 0、from_route_id が指定されている場合は 1、from_trip_id が指定されている場合は 2 となります。乗換先も同様に、to_stop_id のみが指定されている場合は 0、to_route_id が指定されている場合は 1、to_trip_id が指定されている場合は 2 となります。これら 2 つの値を合計して、乗り換えの特異性を 0~4 の値で表します。到着する旅程と出発する旅程の順序の組み合わせについては、これら 2 つの旅程に適用される乗り換えのうち、最も特異性の高い乗り換えが選ばれます。そのため、どの旅程の組み合わせについても、最も特異性の高い同等の乗り換えが 2 つ存在することはありません。

曖昧なルールの例:

from_stop_id,to_stop_id,from_route_id,to_route_id,transfer_type
stopFrom,stopTo,routeFrom,,0
stopFrom,stopTo,,routeTo,1

これらの 2 つの乗り換えの特異性は両方とも 1 になります。しかし、駅「stopFrom」に到着するルート ID routeFrom の旅程から駅「stopTo」に到着するルート ID routeTo の旅程への乗り換えには、これら 2 つの規則のいずれかを適用できます。