Route Advisor
ルートアドバイザーとは、ルート案内中により良いルートを提供する機能のことです。
SDKは以下の条件のいずれかを満たすとき、新ルートを提案します。
- より良いルートが見つかった
- 渋滞を回避して早く目的地に到着するルート
- 到着時間と有料道路料金のバランスを考慮して一般道を走行するルート
- 交通状況の変化によりルート上に通行止めが発生した
- 事故や工事など
「より良いルート」の提案はドライバーの判断で無視できます。しかし、通行止めによる新ルート提案は無視せず、ルート変更が必須であることを通知し、新ルートに切り替える必要があります。
提案を受ける
SDKから新ルートの提案を受けるにはRouteAdvisorListenerを設定します。
Navi.getInstance().addRouteAdvisorListener(new RouteAdvisorListener() {
@Override
public void onNewRouteProvideStarted(RouteAdvisorInfo routeAdvisorInfo) {
// 新しいルートが提案された時に呼び出されます。
// 画面に新ルートの特徴やルート全景を表示するとよいでしょう。
}
@Override
public void onDistanceUpdated(RouteAdvisorInfo routeAdvisorInfo) {
// 新ルートにした時、現在案内中ルートから逸れる地点までの距離が変化した時に呼び出されます。
// あと何メートル以内に新・旧どちらかのルートを選んで欲しい、という処理を記述できます。
}
@Override
public void onDistanceUpdateStopped() {
// 新ルートが選ばれずにしばらく走行した時に呼び出されます。
// これ以降、別のルートが提案されるまでリスナ呼び出しは発生しなくなります。
}
});
提案の種類を判別する
RouteAdvisorInfo.getType()で新ルートがどのような経緯で提案されたのか判別できます。
| RouteAdvisorInfo.Type | 意味 |
|---|---|
| CLOSE | 案内中ルートに生じた通行止めを回避する提案です |
| TIME_REGULATION | 案内中ルートに生じた時間規制による通行止めを回避する提案です |
| OTHER | 通行止め以外の要因の提案です |
| UNKNOWN | 未定義の提案です |
CLOSEまたはTIME_REGULATIONの場合はドライバーに回避不能なルート変更がある旨を伝え、了承を得てから新ルートに切り替えてください。
UNKNOWNの場合は未定義のデータが含まれますので使用しないでください。
新ルートに切り替える
RouteAdvisorListenerで通知されるRouteAdvisorInfoをNavi.startGuidance()の引数に指定します。
Navi.getInstance().startGuidance(routeAdvisorInfo.getNewRoute(), (errorCode, guidePointResult) -> {
if (errorCode == StartGuidanceListener.ErrorCode.NONE) {
// 新ルート切り替え成功
}
else {
// 新ルート切り替え失敗
}
});
案内中ルートを継続する
提案された新ルートが不要な場合、Navi.cancelRouteAdvisorRoute()で消去します。
Navi.getInstance().cancelRouteAdvisorRoute();
Navi.displayRouteAdvisorRoute()でルート探索結果表示中、新ルートと案内中ルートの選択/非選択をそれぞれ指定されたデザインで切り替えることができます。
デフォルトのデザインから変更したい場合は、「ルート線のデザイン変更」を参照して
事前にデザイン変更してください。
新ルートを選択したい場合、Navi.selectNewRoute()を呼び出します。
案内中ルートを選択したい場合、Navi.selectOldRoute()を呼び出します。
探索条件を変更する
提案されるルートの探索条件を変更する場合、RouteOptionsを設定し、Navi.changeRouteAdvisorOptions()の引数に指定します。
案内中ルートの探索条件を取得、有料道路を使用しない設定に変更するサンプルコードは以下の通りです。
// 案内中ルートの探索条件を取得
RouteOptions routeOptions = Navi.getInstance().getRoutePlan().getRouteOptions();
if (routeOptions == null) {
routeOptions = new RouteOptions();
}
// 有料道路を使用しない設定にする
routeOptions.setUseToll(false);
// ルートアドバイザー探索条件変更
Navi.getInstance().changeRouteAdvisorOptions(routeOptions);