Route Advisor
ルートアドバイザーとは、ルート案内中により良いルートを提供する機能のことです。
SDKは以下の条件のいずれかを満たすとき、新ルートを提案します。
- より良いルートが見つかった
- 交通状況の変化によりルート上に通行止めが発生した
前者は、例えば渋滞を回避して早く目的地に到着するルートや、到着時間と有料道路料金のバランスから一般道を走行するルートなどです。
より良いルートの提案はドライバーの好みに合わなければ無視できますが、通行止めによる新ルート提案は無視せずドライバーにルート変更を余儀なくされることを通知し、新ルートに切り替えるべきでしょう。
提案を受ける
SDKから新ルートの提案を受けるにはRouteAdvisorListener
を設定します。
Navi.getInstance().setRouteAdvisorListener(new RouteAdvisorListener() {
@Override
public void onNewRouteProvideStarted(RouteAdvisorInfo routeAdvisorInfo) {
// 新しいルートが提案された時に呼び出されます。
// 画面に新ルートの特徴やルート全景を表示するとよいでしょう。
}
@Override
public void onDistanceUpdated(RouteAdvisorInfo routeAdvisorInfo) {
// 新ルートにした時、現在案内中ルートから逸れる地点までの距離が変化した時に呼び出されます。
// あと何メートル以内に新・旧どちらかのルートを選んで欲しい、という処理を記述できます。
}
@Override
public void onDistanceUpdateStopped() {
// 新ルートが選ばれずにしばらく走行した時に呼び出されます。
// これ以降、別のルートが提案されるまでリスナ呼び出しは発生しなくなります。
}
});
[TODO] ルート新旧の比較のスクリーンショットを貼る
提案の種類を判別する
RouteAdvisorInfo.getType()
で新ルートがどのような経緯で提案されたのか判別できます。
RouteAdvisorInfo.Type | 意味 |
---|---|
CLOSE | 案内中ルートに生じた通行止めを回避する提案です |
OTHER | 通行止め以外の要因の提案です |
注意:
CLOSE
の場合はドライバーに回避不能なルート変更がある旨を伝え、了承を得てから新ルートに切り替えてください。
新ルートに切り替える
RouteAdvisorListener
で通知されるRouteAdvisorInfo
をNavi.startGuidance()
の引数に指定します。
Navi.getInstance().startGuidance(routeAdvisorInfo.getNewRoute(), (errorCode, guidePointResult) -> {
if (errorCode == StartGuidanceListener.ErrorCode.NONE) {
// 新ルート切り替え成功
}
else {
// 新ルート切り替え失敗
}
});
案内中ルートを継続する
提案された新ルートが不要な場合、Navi.cancelRouteAdvisorRoute()
で消去します。
Navi.getInstance().cancelRouteAdvisorRoute();