駅すぱあと API BLOG

駅すぱあと APIの開発チームが作るブログです。

地点生成機能を使ってみよう!! ~任意の地点からの経路探索~

みなさんこんにちは!! 熊野です。
今回は、駅すぱあとWebサービスの機能から、「便利だけどわかりづらい」と噂の地点生成機能をご紹介します。

どんな機能なの?

地点生成機能は一言で言うと、『地点データ』を生成する機能です。これだけでは分からないので、まずは地点データからご説明します。

駅すぱあとの情報の持ち方

まずは駅すぱあとが持っている情報について見てみましょう。駅すぱあとは内部に以下のような、駅と路線で構成された情報を持っています。

f:id:kumatira:20190204140228p:plain
駅すぱあとのネットワークイメージ図。丸が駅、線が路線

これらの情報はノードとエッジ、さらにそれぞれに情報や重みを持っているためネットワークとも呼ばれています。実際には鉄道のネットワークだけでなく、バスなど他の交通種別、駅間の徒歩乗り換え経路、運賃計算のための架空のエッジなども含んでいますが、ここでは一旦省きます。

経路探索がリクエストされた時、駅すぱあとの探索エンジンはノード(駅)からノード(駅)への経路探索を行い、結果を返しています。 そのため、このままだと駅すぱあとが情報を持っている「駅」*1すなわち公共交通機関が通っている経路しか経路探索できません。

そこで地点データ

そこで登場するのが地点データです。地点データは地点(ノード)の情報と、他の駅(ノード)とを結ぶ経路(エッジ)の情報を持っています。これを駅すぱあとに与えることで、

f:id:kumatira:20190204142412p:plain
地点データを足したネットワークイメージ図

図のように、自分で作成した「地点」を駅すぱあとのネットワークに組み込むことができるのです!! この時、組み込んだ「地点」や経路は経路探索の出着駅や経由駅として用いることができます。つまり任意の地点からの経路探索ができるようになります。

この「地点」をネットワークに組み込むための地点データを生成できるのが、今回ご紹介する地点生成機能です。 まだイメージが掴みづらいと思いますので、実際に使ってみましょう。

どうやって使うの?

地点データを作るにはいくつかの情報が必要です。

  • 地点の名称
  • どの駅(ノード)と紐づけるか
  • 紐づけた駅との間の経路(エッジ)の情報。所要時間や運賃、移動手段など

これらの情報は経路探索の結果に利用されます。では地点を生成してみましょう!

地点生成機能

駅すぱあとWebサービスの地点生成機能は /v1/{format}/toolbox/course/pointに必要なパラメータをつけてリクエストすることで利用できます。 以下のようなパラメータがあります。

パラメータ名
name 「地点」の名称 ネットワークに組み込む地点の名前 おうち
station 駅コードや出口コード ネットワークに組む込む時、どのノードと紐づいた地点とするかを指定します。最大5つまで指定できます 22671:22735
time 所要時間 結びつけた駅や出口までかかる時間 5:15
traffic 交通手段 結びつけた駅や出口への交通手段 自転車:タクシー
fare 料金 結びつけた駅や出口への料金 0:780

それぞれのパラメータや他のパラメータについてはの詳しい情報はこちらのドキュメントをご覧ください! 地点生成 - 駅すぱあとWebサービス Documents 駅データ・路線検索のWebAPI

実際にリクエストしてみます。この例では、高円寺駅へ自転車で5分、新高円寺駅へタクシーで15分の「おうち」という地点を生成しています。

https://api.ekispert.jp/v1/json/toolbox/course/point?name=おうち&stationCode=22671:22735&time=5:15&fare=0:780&traffic=自転車:タクシー&key=YOUR_API_KEY

するとこんなレスポンスが帰ってきます。

{
  ResultSet: {
    apiVersion: "1.27.0.0",
    engineVersion: "201902_01a",
    Point: {
      SerializeData: "P-%E3%81%8A%E3%81%86%E3%81%A1-22671,22735-5,15-0,780-%E8%87%AA%E8%BB%A2%E8%BB%8A,%E3%82%BF%E3%82%AF%E3%82%B7%E3%83%BC--0----"
    }
  }
}

この $.ResultSet.Point.SerializeData に入っている文字列が地点データです。

経路探索してみよう

では上で作った「おうち」という地点を使って新宿駅までの経路探索をしてみましょう!! 使い方は簡単で、経路探索機能 (/search/course/extreme)の viaList パラメータに通常の駅コードなどど同様に指定するだけです。 なお地点データは平均待ち時間探索 (/search/course/plain)でも利用できます。

https://api.ekispert.jp/v1/json/search/course/extreme?viaList=P-%E3%81%8A%E3%81%86%E3%81%A1-22671,22735-5,15-0,780-%E8%87%AA%E8%BB%A2%E8%BB%8A,%E3%82%BF%E3%82%AF%E3%82%B7%E3%83%BC--0----:22741&key=YOUR_API_KEY

ちょっとURLが見辛いですが、上記でリクエストしてみます。すると

f:id:kumatira:20190204165346p:plain
おうち→(自転車)→高円寺→(JR中央線快速)→新宿

こんな経路や

f:id:kumatira:20190204165519p:plain
おうち→(タクシー)→新高円寺→(丸ノ内線)→新宿(東京メトロ)→(徒歩)→新宿

こんな経路が帰ってきます。確かに先ほど地点生成機能で設定した地点の名前や移動手段が利用されていますね!!

なお結果イメージはGUIサンプルを利用した便利な経路探索結果の可視化ツールを使わせていただきました↓

github.com

ところで

地点データの作成には紐づけた駅との間の経路(エッジ)の情報が必要と説明しました。この経路の所要時間や料金の情報はアプリケーション側で用意する必要があります。

地点と駅の直線距離を速度で割ってもいいですし、Directions API(Google Maps Platform)やOpenTripPlannerといった道路の経路探索が得意なサービスやアプリケーションから取ってくるのもいいですね!

実際に、シェアサイクルと公共交通をミックスした経路探索ができるmixwayでは、シェアサイクル部分の情報をGoogle Maps Platformから取得し、駅すぱあとWebサービスの地点生成機能を使って経路探索をしています。ぜひご利用ください(宣伝)

mixway.ekispert.net


ということで長くなりましたが地点生成機能のご紹介でした。 他の情報やAPIとうまく組み合わせてご利用ください!!

*1:「駅」にはいわゆる鉄道駅以外にバス停をはじめとする公共交通機関の停車する場所も含みます。詳しくは「駅すぱあとWebサービス」における「駅」は鉄道駅だけではないのです