ルート前後検索の実装方法

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

tips_前後検索

▲ナビタイムジャパンの個人ユーザー向け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"}]

まとめ

サービスを利用される方の利便性向上に是非活用してみてください。