OpenTripPlannerとGTFSを利用して独自の乗り換え案内を作ってみたの関連記事です。
OTPをJavaライブラリとして使用して乗り換え案内サイト・欧亜大陸鉄道を作った時のTips。
はじめに
OpenTripPlanner(OTP)にはWebサービスがあり、その中の IndexAPI を使えば、登録済みのGTFSデータを取得することができる。
ですが、アプリ内部でライブラリ的にOTP的を利用しているときはどのようにしてデータを取得すればよいのかという話。
結論
結論から言えば、IndexAPIのソース(org.opentripplanner.index.IndexAPI)を見れば一目同然。
それでは、身もふたもないので...。
ソース
// GraphオブジェクトからGraphIndexオブジェクトを取得
GraphIndex index = graph.index;
// GraphIndexオブジェクトからGTFSデータを取得する
// route情報を取得
Route r = index.routeForId.get(new FeedScopedId("fid", "tokaido"));
// stop情報を取得
Stop s = index.stopForId.get(new FeedScopedId("fid", "tokyo"));
// trip情報を取得
Trip t = index.tripForId.get(new FeedScopedId("fid", "fuji1"));
解説
OTP上でGTFSの各要素を特定するためには、Feed IDとGTFS上のIDの組み合わせが必要。
複数のGTFSファイルを取り込むことができるOTPではデータ取り込み時に各GTFSファイルに一意のIDを付与するが、これがFeed ID。(詳しくは、こちらを参照)
このFeed IDとGTFS上のIDの組み合わせを表すオブジェクトがorg.opentripplanner.model.FeedScopedId。このオブジェクトを生成し、それをキーとして該当要素を検索する。
GTFSデータが格納されているのは、org.opentripplanner.routing.graph.Graphオブジェクトのindexプロパティから取得できるorg.opentripplanner.routing.graph.GraphIndexオブジェクト。
表にまとめると以下の通り。
GTFSのファイル | 対応するOTPのオブジェクト | 取得できるGraphIndexのプロパティ |
---|---|---|
agency.txt | org.opentripplanner.model.Agency | agenciesForFeedId |
stops.txt | org.opentripplanner.model.Stop | stopForId |
routes.txt | org.opentripplanner.model.Route | routeForId |
trips.txt | org.opentripplanner.model.Trip | tripForId |
なお、OTP 1.3以前では、GTFS関連のメタデータは、OneBusAwayの同名オブジェクトをしようしていた。パッケージは違うものの使い方は同じである。