LoginSignup
1
0

More than 3 years have passed since last update.

OpenTripPlannerのGraphからGTFSデータを取得する

Last updated at Posted at 2020-05-16

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の同名オブジェクトをしようしていた。パッケージは違うものの使い方は同じである。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0