経路探索結果で「早・安・楽」の判定をしたい

経路探索のレスポンスを利用して、「早・安・楽」経路を判定する一例をご紹介します。 「駅すぱあとWebサービス」では、判定結果を返す機能は存在していないため、 お客様のアプリケーション側で判定を行う実装をしていただく必要があります。 どのような定義の、どのようなアイコンを表示させたいかはアプリケーションにより異なるかと思いますので、参考情報としてご覧ください。

※イメージ図 (駅すぱあと for iPhone)

Slack for iOS Upload.jpg (30.7 kB)

関連URL

手順

1. 経路探索を行う

経路探索を行います。

GET /v1/xml/search/course/extreme?viaList=22849:23019
<ResultSet apiVersion="1.26.0.0" engineVersion="201605_02a">
<Course searchType="departure" dataType="onTimetable">
<Route timeOther="6" timeOnBoard="7" exhaustCO2="105" index="1" exhaustCO2atPassengerCar="806" distance="48" timeWalk="0" transferCount="1">
<Point index="1">
<Station code="22849">
<Name>中野(東京都)</Name>
<Type>train</Type>
<Yomi>なかの</Yomi>
</Station>
:

経路簡易探索平均待ち時間バスのみ探索平均待ち時間探索でも探索は可能ですが、経路探索を利用すれば、多くの探索条件を指定することが出来ます。

探索条件のポイント1

最大探索数(searchCountパラメータ)と最大回答数(answerCountパラメータ)を多くすることで、多くの選択肢(経路)からソートすることが出来ます。

※最大探索数や最大回答数を多くすると、少なからずレスポンス速度に影響が出ます。

searchCount=20&answerCount=20

探索条件のポイント2

ソート種別をうまく利用すると、アプリケーション側で行う判定を少し省略することが出来ます。 ソート種別のデフォルト値は「駅すぱあと」探索順なので、ソート種別に何も指定していなければ、「早」経路の判定を行うことを省略出来ます。

sort=ekispert

探索条件のポイント3

「駅すぱあとWebサービス」の経路探索は、ソート種別の値関係なく、「駅すぱあと」探索順で最大探索数の値の数だけ経路を探索し、その後に、ソート種別の値を用いてソートを行い最大回答数分の経路を先頭から取り出す仕組みとなっています。 つまり、「安」「楽」は、最大探索数と最大回答数を多くすることで精度が向上します。 返却経路数が多い場合は、searchCount=20を指定した上で、最大回答数に欲しい経路数と優先したいソート種別を指定してください。

searchCount=20&answerCount=5&sort=price

上記のパラメータ指定例は、「駅すぱあと」探索順にて20件の経路を取得し、料金順でソートした上位5件を返すといった動きをしています。

ソート種別は一度に複数の値を設定することは出来ないため、「安」「楽」を両方優先して出したい場合は、探索条件のポイント1の手段を取ることをお勧めします。

2. 「早」経路の判定を行う

平均待ち時間による探索の場合と、ダイヤによる探索の場合とで判定材料が異なります。

平均待ち時間による探索の場合

乗車・移動・待ち時間等を合計した所要時間の短いものを「早」経路とする方法です。

比較対象は、以下の3つの値です。

  • 経路の乗車時間合計(ResultSet/Course/Route/timeOnBoardの値)
  • 経路のその他(列車待ち合わせ時間等)時間合計(ResultSet/Course/Route/timeOtherの値)
  • 経路の徒歩時間合計(ResultSet/Course/Route/timeWalkの値)

3つの値の合計値を各経路と比較し、一番値が少ない経路が「早」経路となります。

ダイヤによる探索の場合

出発時刻を指定する探索の場合には到着時刻が最も早いもの、到着時刻を指定する探索の場合には出発時刻が最も遅いものを「早」経路とする方法です。

出発時刻を指定する探索の場合

探索種別が発時刻探索と始発探索が対象です。

1. 14:17発 ~ 14:23着 (「早」経路)
2. 14:15発 ~ 14:23着
3. 14:17発 ~ 14:25着
  1. 到着時刻(経路の最終区間のResultSet/Course/Route/Line/ArrivalState/Datetimeの値)の早い順でソートします。
  2. 到着時刻が同一だった場合は、出発時刻(経路の開始区間のResultSet/Course/Route/Line/DepartureState/Datetimeの値)が遅い順にソートします。
着時刻探索と終電探索の場合

探索種別が着時刻探索と終電探索が対象です。

1. 13:06発 ~ 14:02着 (「早」経路)
2. 13:04発 ~ 13:50着
3. 12:59発 ~ 14:00着
  1. 出発時刻(経路の開始区間のResultSet/Course/Route/Line/DepartureState/Datetimeの値)の遅い順でソートします。
  2. 出発時刻が同一だった場合は到着時刻(経路の最終区間のResultSet/Course/Route/Line/ArrivalState/Datetimeの値)が早い順にソートします。

ソートした結果の一番目の経路が「早」経路となります。

3. 「安」経路の判定を行う

片道運賃、往復運賃、または定期代で比較するのかによって、比較対象が異なります。

:
<Price kind="FareSummary">
<Oneway>310</Oneway>
<Round>620</Round>
</Price>
<Price kind="Teiki1Summary">
<Oneway>10520</Oneway>
</Price>
<Price kind="Teiki3Summary">
<Oneway>29990</Oneway>
</Price>
<Price kind="Teiki6Summary">
<Oneway>54480</Oneway>
</Price>
:

片道運賃で比較する場合

比較対象はResultSet/Course/Price/kindの値がFareSummaryとなっている、ResultSet/Course/Price/Onewayの値です。

往復運賃で比較する場合

比較対象はResultSet/Course/Price/kindの値がFareSummaryとなっている、ResultSet/Course/Price/Roundの値です。

定期代で比較する場合

比較対象はResultSet/Course/Price/kindの値がTeiki1Summary,Teiki3SummaryまたはTeiki6Summaryとなっている、ResultSet/Course/Price/Onewayの値です。

各経路と比較し、一番値が少ない経路が「安」経路となります。

4. 「楽」経路の判定を行う

「楽」=乗換回数が少ない と定義する場合、 比較にはResultSet/Course/Route/transferCountを使用します。

各経路を比較し、一番値が少ない経路が「楽」経路となります。