Route Advisor

ルートアドバイザーとは、ルート案内中により良いルートを提供する機能のことです。

SDKは以下の条件のいずれかを満たすとき、新ルートを提案します。

  1. より良いルートが見つかった
  2. 交通状況の変化によりルート上に通行止めが発生した

前者は、例えば渋滞を回避して早く目的地に到着するルートや、到着時間と有料道路料金のバランスから一般道を走行するルートなどです。

より良いルートの提案はドライバーの好みに合わなければ無視できますが、通行止めによる新ルート提案は無視せずドライバーにルート変更を余儀なくされることを通知し、新ルートに切り替えるべきでしょう。

提案を受ける

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で通知されるRouteAdvisorInfoNavi.startGuidance()の引数に指定します。

Navi.getInstance().startGuidance(routeAdvisorInfo.getNewRoute(), (errorCode, guidePointResult) -> {
	if (errorCode == StartGuidanceListener.ErrorCode.NONE) {
		// 新ルート切り替え成功
	}
	else {
		// 新ルート切り替え失敗
	}
});

案内中ルートを継続する

提案された新ルートが不要な場合、Navi.cancelRouteAdvisorRoute()で消去します。

Navi.getInstance().cancelRouteAdvisorRoute();