ルート前後検索の実装方法
乗換検索で経路を調べる際に、もう1本後だと何時出発で何時に着くか、確認したくなるときがあります。 そんなときに便利なのが、調べた経路の前後の検索ができる機能です。

▲ナビタイムジャパンの個人ユーザー向けWebサービスの乗換検索結果の機能例
ここでは「ルート前後検索(/route_slide)」APIを使って前後の検索機能を実装する方法をご紹介いたします。
※「ルート前後検索(/route_slide)」のご利用は、オプションの時刻表データ利用の契約が前提となります。
事前準備
まずは「ルート検索(トータルナビ)(/route_transit)」APIを使って、元になるルートを検索し、必要な情報を抽出します。
1. ルートを検索します
リクエスト例(表参道〜登戸、2020年07月30日8:00出発)
/route_transit?start=00007820&goal=00006541&start_time=2020-07-30T08:00:00&train_data=timetable
2. 「ルート前後検索(/route_slide)」のリクエストに必要な情報を抽出します
抽出する情報
- ルート前後検索の対象となる出発ノード、列車ID
- ルート前後検索の対象となる出発時間 ※時刻表の出発時間
- 基準経路(元の経路の対象区間)
- 公共交通を利用する全ての区間(transportオブジェクトがあるsection)を指定
公共交通を利用する区間の出発ノード及び出発時間を抽出してください。
徒歩や自転車等の出発ノード及び出発時間を抽出すると、適切なルート前後検索を行うことができません。
実際のレスポンス例
{ "items": [ { "summary": { // 一部省略 }, "sections": [ { "type": "point", "coord": { "lat": 35.665777, "lon": 139.711294 }, "name": "表参道", "node_id": "00007820", // ← ① 対象となる出発ノード "node_types": [ "station" ], "start_platform": "1番ホーム", "numbering": { // 一部省略 } }, { "next_transit": true, "transport": { "fare": { // 一部省略 }, "color": "#00BB85", "destination": { "name": "代々木上原", "id": "00005508" }, "type": "普通", "fare_break": { "unit_0": true, "unit_48": true, "unit_128": true, "unit_130": true, "unit_133": true, "unit_136": true, "unit_138": true, "unit_141": true }, "getoff": "前・中・後", "name": "東京メトロ千代田線", "fare_season": "normal", "self_id": "008501cc", // ← ② 対象となる列車ID "company": { "id": "00000113", "name": "東京地下鉄(メトロ)" }, "links": [ { "id": "00000769", // ← ③-1 基準経路の路線ID "name": "東京メトロ千代田線", "direction": "up", // ③-2 基準経路の方向 "destination": { "name": "代々木上原", "id": "00005508" }, "from": { "name": "表参道", "id": "00007820" // ← ③-3 基準経路の出発駅ID }, "to": { "name": "代々木上原", "id": "00005508" // ← ③-4 基準経路の到着駅ID }, "is_timetable": "true" // ← is_timetabeleがtrueであれば1本前後検索が可能ということを示す } ], "id": "00000566", "train_id": "A727S", "fare_detail": [ // 一部省略 ] }, "type": "move", "move": "local_train", "from_time": "2020-07-30T08:01:00+09:00", // ← ④ 出発時間 "to_time": "2020-07-30T08:07:00+09:00", "time": 6, "distance": 3100, "line_name": "東京メトロ千代田線", "transfer_seconds": 60 }, { "type": "point", "coord": { "lat": 35.66898, "lon": 139.679598 }, "name": "代々木上原", "node_id": "00005508", "node_types": [ "station" ], "start_platform": "1・2番ホーム", "goal_platform": "2番ホーム", "numbering": { // 一部省略 } }, { "transport": { "fare": { // 一部省略 }, "color": "#3CB9FB", "destination": { "name": "小田原", "id": "00003742" }, "type": "急行", "fare_break": { "unit_0": true, "unit_48": true, "unit_128": true, "unit_130": true, "unit_133": true, "unit_136": true, "unit_138": true, "unit_141": true }, "name": "小田急小田原線急行", "fare_season": "normal", "self_id": "820600d5", "company": { "id": "00000073", "name": "小田急電鉄" }, "links": [ { "id": "00000686", // ← ➄-1 基準経路の路線ID "name": "小田急小田原線", "direction": "down", // ← ➄-2 基準経路の方向 "destination": { "name": "小田原", "id": "00003742" }, "from": { "name": "代々木上原", "id": "00005508" // ← ➄-3 基準経路の出発駅ID }, "to": { "name": "登戸", "id": "00006541" // ← ➄-4 基準経路の到着駅ID }, "is_timetable": "true" } ], "id": "00002859", "train_id": "1221", "fare_detail": [ // 一部省略 ] }, "type": "move", "move": "local_train", "from_time": "2020-07-30T08:09:00+09:00", "to_time": "2020-07-30T08:23:00+09:00", "time": 14, "distance": 11700, "line_name": "小田急小田原線急行" }, { "type": "point", "coord": { "lat": 35.621018, "lon": 139.56943 }, "name": "登戸", "node_id": "00006541", // ← ⑥ 到着ノード "node_types": [ "station" ], "goal_platform": "1・2番ホーム", "numbering": { // 一部省略 } } ] },
ルート前後検索にリクエストする
事前準備で抽出した情報を、以下のパラメータに指定して、ルート前後検索を行います。
- ①:対象となる出発ノード → start_node、start
- ②:対象となる列車ID → train_id
- ③-1:基準経路の路線ID → basis_routeのlink
- ③-2:基準経路の方向 → basis_routeのdirection
- ③-3:基準経路の出発駅ID → basis_routeのstart
- ③-4:基準経路の到着駅ID → basis_routeのgoal
- ④:出発時間 → start_time
- ⑤-1~4 については、③-1~4 と一緒にbasis_routeに指定
- ⑥:到着ノード → goal
リクエスト例(対象経路の3本後までを出力)
/route_slide?start=00007820&goal=00006541&start_time=2020-07-30T08:01:00&start_node=00007820&train_id=008501cc&range=3&basis_route=[{"start":"00007820","goal":"00005508","link":"00000769","direction":"up"},{"start":"00005508","goal":"00006541","link":"00000686","direction":"down"}]
まとめ
サービスを利用される方の利便性向上に是非活用してみてください。