Location
この章では自車位置がルート上のどこにいるのか把握する方法と、ルート逸脱からの復帰手段を紹介します。
ルートと案内地点、通過交差点の関係
GuidePointとPassPointはルート全体を網羅するよう生成され、それぞれリスト管理されています。
Fig.1はルート全体とGuidePoint、PassPointがどう対応付くのか示したイメージです。
このルートはコンビニを立ち寄り地に設定していて、途中で踏切を通過します。
Fig.1に示したルートには案内地点が4つあります。
- GuidePoint:1 -- ルート開始地点から最初の突き当たり
ここで右折の案内が必要ですので案内地点になっています。 - GuidePoint:2 -- コンビニに設定された立ち寄り地
立ち寄り地は接近・到着したことの案内が必要ですので案内地点になっています。 - GuidePoint:3 -- 踏切を超えた先の信号機がある十字路
ここで左折の案内が必要ですので案内地点になっています。 - GuidePoint:4 -- 目的地
目的地は接近・到着したことの案内が必要ですので案内地点になっています。
Fig.1に示したルートには通過交差点が8つあります。
- PassPoint:1 -- ルート開始地点から最初の突き当たり (GuidePoint:1)
案内地点は必ずPassPointが生成されます。
信号機があるPassPointはisTrafficLight()がtrueを返します。 - PassPoint:2 -- 信号機のある丁字路
案内が不要な地点にもPassPointは生成されます。 - PassPoint:3 -- コンビニに設定された立ち寄り地 (GuidePoint:2)
立ち寄り地は必ずPassPointが生成されます。 - PassPoint:4 -- 踏切まえの信号機がある十字路
- PassPoint:5 -- 踏切
踏切があるPassPointはisRailCross()がtrueを返します。 - PassPoint:6 -- 踏切後の信号機がない十字路
信号機がない交差点もPassPointになり得ます。 - PassPoint:7 -- 踏切後の信号機がある十字路 (GuidePoint:3)
- PassPoint:8 -- 目的地 (GuidePoint:4)
目的地は必ずPassPointが生成されます。
なお、
Navi.getGuidePointList()で案内地点リストを、
Navi.getPassPointList()で通過交差点リストをそれぞれ取得できます。
自車位置情報(RunInfo)の概要
RunInfoは以下の情報で構成されます。
- 直近の
GuidePointまでの距離や時間といった案内地点情報:GuidePointInfo - 直近の
PassPointまでの距離や時間といった通過交差点情報:PassPointInfo - 自車走行速度や自車方位、走行中道路の名称や速度制限といった自車位置情報:
OwnCarInfo - 目的地までの距離や時間といった目的地情報:
DestinationInfo
OwnCarInfo、DestinationInfoの詳細はAPI Referenceをご覧ください。
GuidePoint と GuidePointInfoの違いについて
GuidePoint, PassPointは直前の地点からの情報を提供します。これらは自車位置によらず内容は変化しません。
一方、GuidePointInfo, PassPointInfoは自車位置に基づいた次の地点までの情報を提供します。
案内中ルートがない時のRunInfo
案内中ルートがない時にもRunInfoは提供され続けますが、有効なデータは次の2種類のみになります。
OwnCarInfoPassPointInfo
案内中ルートがない場合のPassPointInfoは、予測進路上の通過交差点情報を提供します。
予測進路上の地点情報かどうかは、PassPointInfo.isPredicted()で判断できます。
予測進路上の通過交差点リストはNavi.getDetailPassPointList()で取得できます。
Navi.getPassPointList()とNavi.getDetailPassPointList()の違いについて
Navi.getPassPointList()は案内中ルートがある時だけ取得でき、目的地までのすべての地点が含まれます。
Navi.getDetailPassPointList()は案内中ルートの有無に関わらず取得でき、自車位置から一定距離以内の地点のみ含まれます。
どちらの関数もPassPointのListを返却しますが、Navi.getPassPointList()で得られるオブジェクトには以下のデータが含まれていません。
booleanを返却する関数は全てfalseを、オブジェクトを返却する関数は全てnullを返却します。
- オービス情報(
getOrbisGuidanceInfo(),isOrbis()) - 合流案内音声情報(
getJoinGuidanceInfo()) - 踏切案内音声情報(
getRailCrossGuidanceInfo()) - レーン案内音声情報(
getLaneGuidanceInfo()) - 方面案内音声情報(
getDistrictSignGuidanceInfo()) - ワークロード情報(
getWorkLoadInfo()) - 橋かどうか(
isBridgeEntrance(),isBridgeExit(),isBridgeInLink(),isBridgeOutLink()) - 冠水注意地点かどうか(
isFloodingZoneEntrance(),isFloodingZoneExit(),isFloodingZoneInLink(),isFloodingZoneOutLink()) - 未舗装路かどうか(
isUnpavedRoadEntrance(),isUnpavedRoadExit(),isUnpavedRoadInLink(),isUnpavedRoadOutLink()) - 急カーブ情報(
getCurveInfo()) - 事故多発地点かどうか(
isAccidentProneEntrance(),isAccidentProneExit(),isAccidentProneInLink(),isAccidentProneOutLink(),isAccidentProneSpot())
特に注意すべき点として、オービスがあるかどうか(isOrbis())はNavi.getPassPointList()で得られるオブジェクトでは必ずfalseになります。
トンネルでの挙動について
SDKはトンネル内走行中は、推定速度を使用して走行状態を維持します。
この走行状態はトンネル内で自車位置を更新できない状態を防ぐための機能です。
この機能により、トンネル内でも次のことが可能になります。
- 音声誘導を提供可能
- 地図上の自車位置アイコンを更新可能
ただし、この状態では正確に自車位置を更新することができません。
SDKが推定速度による走行状態になっているかどうかは、OwnCarInfo.isUsingEstimatedVelocity()で確認できます。
boolean isUsingEstimatedVelocity = Navi.getInstance().getRunInfo().getOwnCarInfo().isUsingEstimatedVelocity();
到着予想時間について
目的地・立寄り地までの到着予想時間は、目的地情報:DestinationInfoより所要時間(sec)を取得して
出発時刻もしくは現在時刻に、取得した所要時間を足し合わせれば、おおよその到着時刻が確認可能です。
// 自車位置情報取得
RunInfo runInfo = Navi.getInstance().getRunInfo();
// 目的地までの所要時間を取得
int destinationArrivalTime = runInfo.getDestinationInfo().getTime();
// 直近の立寄り地までの所要時間を取得
int nearestWayPointArrivalTime = runInfo.getWayPointInfo(runInfo.getOwnCarInfo().getRouteSectionNo()).getTime();
オートリルート
SDKがルートを逸れる道路を走行したことを検知すると、自動的にその道路から目的地までのルートを再探索します。
この再探索機能をオートリルートといいます。
再探索開始と完了の検知方法
AutoRerouteListenerにて再探索開始と完了をそれぞれ通知します。
この通知を受けたい場合、Navi.addAutoRerouteListener()でリスナを登録してください。
Navi.getInstance().addAutoRerouteListener(new AutoRerouteListener() {
@Override
public void onStarted() {
// 再探索開始時の処理
}
@Override
public void onFailed(ErrorCode errorCode) {
// 再探索失敗時の処理
}
@Override
public void onCompleted(ErrorCode errorCode, AutoRerouteResult autoRerouteResult) {
// 再探索成功時の処理
}
});
並走道路の判断間違い
SDKは並走道路を走行中、稀に逆の道路を走行中と判断する事があります。
この時、SDKは独力でこの間違いを検出できません。
そのためSDKは走行している道路を切り替える機能Navi.switchAnotherRoad()を提供しています。
道路切り替え処理のサンプルは以下の通りです。
Navi.getInstance().switchAnotherRoad();
実行結果はSwitchAnotherRoadResultListenerで通知されます。
リスナ登録処理のサンプルは以下の通りです。
// リスナ登録
Navi.getInstance().addSwitchAnotherRoadResultListener(new SwitchAnotherRoadResultListener() {
@Override
public void onCompleted(ResultCode resultCode) {
switch (resultCode) {
case SUCCESS_IC_ENTRANCE: // IC入口への別道路切換を実施して成功した
break;
case SUCCESS_IC_EXIT: // IC出口への別道路切換を実施して成功した
break;
case SUCCESS_NORMAL: // 一般道への別道路切換を実施して成功した
break;
case SUCCESS_TOLL: // 高速・有料道への別道路切換を実施して成功した
break;
case FAIL_NORMAL: // 一般道への別道路切換に失敗
break;
case FAIL_TOLL: // 高速・有料道への別道路切換に失敗
break;
case INVALID:
case FAIL_UNKNOWN:
default:
// 別道路切換に失敗
break;
}
}
});
到着判定
SDKは以下の場合、目的地(立ち寄り地)に到着したと判断しそれ以降は誘導情報の更新を行いません。
- オンルートの場合
目的地のGuidePointまで残り50m以下となった場合
-
オフルートの場合
目的地の緯度経度まで直線距離で50m以内の場合、もしくは目的地のGuidePointの緯度経度まで直線距離で50mの場合
Fig.5 - オフルートでの到着判定 この場合destinationInfo.getDistance()はオフルートになった地点(Fig.5の波線開始位置)を最後に距離更新が止まります。
目的地に到着した場合はDestinationArrivedListener.onArrived()、立ち寄り地に到着した場合はWayPointArrivedListener.onArrived()が通知されます。