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種類のみになります。
OwnCarInfo
PassPointInfo
案内中ルートがない場合の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();
オートリルート
SDKがルートを逸れる道路を走行したことを検知すると、自動的にその道路から目的地までのルートを再探索します。
この再探索機能をオートリルート
といいます。
再探索開始と完了の検知方法
AutoRerouteListener
にて再探索開始と完了をそれぞれ通知します。
この通知を受けたい場合、Navi.setAutoRerouteListener()
でリスナを登録してください。
Navi.getInstance().setAutoRerouteListener(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().setSwitchAnotherRoadResultListener(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;
}
}
});