Access Interchange Select

この章では高速道路の入口・出口のインターチェンジを調整する方法を紹介します。

この機能によって以下のようなドライバーの要望に応えられます。

  • 高速道路を使う区間を絞っても所要時間にさほど変化がないので料金を抑えたい。
  • 使用するICの周辺はいつも混雑するので少しずらしたい。

調整可能な範囲は入口・出口、それぞれ前後3つ分です。 前後3つの間にジャンクションが存在している場合、それぞれの路線ごとに最大3つ分まで選択肢に加わります。

例えば、東名高速道路の浜松ICから高速道路に入る経路の場合、前後にジャンクションが存在しませんので基準地点(浜松IC)を含む7地点から選択できます。

入口IC選択

Fig.1 - ジャンクションがない場合

例えば、伊勢湾岸道路のみえ川越ICから高速道路を出る経路の場合、インターチェンジ3つ分の距離内に東名阪自動車道、新名神高速道路、国道475号線(東海環状自動車道)へ繋がるジャンクションが存在しています。 この場合、Fig.2のように各路線の出口を選択できます。

出口IC選択

Fig.2 - ジャンクションがある場合

乗り降りICのデータ構造

路線ごとに施設リストが格納されています。

路線には通し番号が振られていて、施設は固有のIDが振られています。 施設はインターチェンジがジャンクションのどちらかで、ジャンクションの場合はそのジャンクションに接続されている路線の通し番号リストが格納されています。

Fig.3はFig.1を図示したものです。

ジャンクションなし構造

Fig.3 - 浜松IC起点のデータ構造

Fig.4はFig.2を図示したものです。

みえ川越を起点としたリストには以下4つの路線が存在し、路線それぞれに施設リストが格納されています。

  1. 伊勢湾岸自動車道
  2. 東名阪自動車道
  3. 新名神高速道路
  4. 国道475号線(東海環状自動車道)

ジャンクションあり構造

Fig.4 - みえ川越IC起点のデータ構造

乗り降りIC指定処理の概要

  1. Navi.getAccessibleIC()にて施設情報を取得します。結果がAccessICGetListenerで通知されます。
  2. 画面に結果を表示して、ドライバーに施設を選択してもらいます。
  3. AccessICRerouteRequestオブジェクトを生成し、選択した施設のIDを設定します。
  4. Navi.reroute()にて、ルート再探索を実施します。結果がAccessICRerouteListenerで通知されます。ErrorCodeNONEであれば成功です。
{
	// 施設情報を取得します
	Navi.getInstance().getAccessibleIC(m_accessICRerouteResult, new AccessICGetListener() {
		@Override
		public void onCompleted(ErrorCode errorCode, AccessICGetResult accessICGetResult) {
			if (errorCode == AccessICGetListener.ErrorCode.NONE) {
			// 成功時の処理
			}
		}
	});
}

// ~~ 中略 ~~

{
	// 選択された施設からルート再探索要求用オブジェクトを構築し、ルート再探索を実施します。
	// 入口施設のIDは entranceFacilityId、 出口施設IDは exitFacilityId に格納されていると仮定します。
	AccessICRerouteRequest.ICSpecification entrance = new AccessICRerouteRequest.ICSpecification();
	entrance.setId(entranceFacilityId);
	entrance.setKind(AccessICRerouteRequest.ICSpecification.Kind.SET);

	AccessICRerouteRequest.ICSpecification exit = new AccessICRerouteRequest.ICSpecification();
	exit.setId(exitFacilityId);
	exit.setKind(AccessICRerouteRequest.ICSpecification.Kind.SET);

	AccessICRerouteRequest request = new AccessICRerouteRequest();
	request.setEntrance(entrance);
	request.setExit(exit);

	AccessICRerouteListener accessICRerouteListener = new AccessICGetListener() {
		@Override
		public void onCompleted(ErrorCode errorCode, AccessICGetResult accessICGetResult) {
			if (errorCode == AccessICGetListener.ErrorCode.NONE) {
			// 成功時の処理
			}
		}
	};

	// 案内開始前ルートがある場合、reroute()の引数にそのルートを指定する必要があります。
	if (Navi.getInstance().hasRouteCandidates()) {
		Navi.getInstance().reroute(Navi.getInstance().getSelectRouteResult(), request, accessICRerouteListener);
	}
	else {
		Navi.getInstance().reroute(request, accessICRerouteListener);
	}
}

Note:

入口、出口どちらかだけ変更することもできます。 例えば入口だけ変更したい場合はAccessICRerouteRequestオブジェクトのsetEntrance()だけを呼び出してください。

乗り降りIC指定解除の概要

AccessICRerouteRequestによって設定したインターチェンジを元に戻すことができます。

AccessICRerouteRequest.ICSpecificationオブジェクトを生成し、Kind.RELEASEを設定してください。 なお、施設IDは設定不要です。

AccessICRerouteRequest.ICSpecification entrance = new AccessICRerouteRequest.ICSpecification();
entrance.setKind(AccessICRerouteRequest.ICSpecification.Kind.RELEASE);

AccessICRerouteRequest request = new AccessICRerouteRequest();
request.setEntrance(entrance);

3つ先より遠いインターチェンジを探したい

起点となったインターチェンジではないインターチェンジに変更し、再度Navi.getAccessibleIC()を呼び出すと変更したインターチェンジを起点とした施設リストが生成されます。

この手順を繰り返すことで任意のインターチェンジから出入りできるようになります。