HERE SDK を使用 すると、リアルタイムの交通情報を反映するターンバイターンルートナビゲーションを有効にできます。NMANavigationManager
のsetTrafficAvoidanceMode:
メソッドを使用して、ナビゲーション中に交通を処理する方法を設定できます。
トラフィック回避には 3 つのモードがあり
NMATrafficAvoidanceMode
、次の列挙によって定義されます。 デフォルトのモードはです
NMATrafficAvoidanceDisabled
。
-
NMATrafficAvoidanceDisabled
- 再ルーティング目的でのトラフィックの使用をディセーブルにします。 このモードでは、 giudace エンジンは再ルーティングの目的でトラフィックを使用できません。つまり、再ルーティング中にオンラインのトラフィック情報が考慮されません。 setTrafficAvoidanceMode が有効になっていない限り、 NavigationManager はライブトラフィックデータを考慮しません。
-
NMATrafficAvoidanceDynamic
- ユーザーの入力なしで、トラフィックを認識した再ルーティングを実行します。 このモードでは、誘導エンジンがデバイスがオンラインの間に定期的なルート計算を実行します。 ルート計算は、トラフィックの輻輳を回避し、速度制限を計算することで、サーバが最適なルートを見つけるサーバ要求です。 計算されたルートが現在のルートと異なる場合、ナビゲーション管理者が自動的に新しいルートに切り替えます。 navigationManager:didUpdateRoute:
また、デリゲートメソッドもトリガーされます。
注 : を使用して、ルート要求の頻度を設定 setRouteRequestInterval:
できます。
-
NMATrafficAvoidanceManual
- トラフィック対応の再ルーティングコールバックを提供 navigationManager:didUpdateRoute:
します。 このモードでは、が NMANavigationManager
新しいで明示的に設定されていない限り、再ルーティングは行わ NMARoute
れません。 詳細については、次のセクションを参照してください。
手動によるトラフィックベースの再ルーティング
デバイスがオンラインで NMATrafficAvoidanceManual
モードが選択されている場合、デバイスがオンラインの間、ガイダンスエンジンが定期的にルートの再計算を実行します。 この再計算イベントをリッスンするには、 NMANavigationManagerDelegate
で navigationManger:didChangeRoutingState:
メソッドを実装し、状態の変更を NMATrafficEnabledRoutingStateOn
または NMATrafficEnabledRoutingStateNotAvilable
から NMATrafficEnabledRoutingStateOngoingRequest
に確認します。
注意 :navigationManger:didChangeRoutingState:
コールバックは自動回避モードでも呼び出されます。
ルートの再計算はサーバーリクエストです。 この計算では、渋滞を回避して制限速度を計算することで、最適なルートを探します。 計算されたルートが現在のルートと異なる場合 navigationManager:didFindAlternateRoute:
、デリゲートコールバックを介して新しいルートが返されます。 setRoute:
を呼び出して、新しい NMARoute
を手動で NMANavigationManager
に設定できます。
NMAATrafficWarner クラス
NMATrafficWarner
クラスは、交通情報の有効化と処理を行います。 現在のルートに交通イベントがあり、ユーザーの現在の位置がイベントの近くにある場合、交通通知が発生します。
NMATrafficWarner
オブジェクトのインスタンスを取得するには trafficWarner
、からプロパティを使用 NMANavigationManager
します。 その後 start
、でメソッドを呼び出し NMATrafficWarner
て初期化できます。
トラフィック通知をリッスンするには、 NMATrafficWarnerDelegate
および trafficWarner:didDetectTraffic:
コールバックメソッドを実装します。
以下の 1 つ以上の方法を使用して、トラフィックワーナーを操作したり、ルートの通知を取得したりできます。
-
isTrafficNotificationAhead:
- トラフィック通知が最後のコールバック位置よりも先にあるかどうかを指定します -
isTrafficNotification:onRoute:
- 特定のルートに交通通知があるかどうかを指定します -
trafficNotificationOnCurrentRoute
- ナビゲーション管理者が使用しているルートのトラフィック通知を取得します -
trafficNotificationOnRoute:
- 指定したルートのトラフィック通知を取得します -
stop
- トラフィックワーナーを停止します
NMATrafficNotification クラスおよび NMATrafficNotificationInfo クラス
NMATrafficWarner.Listener
NMATrafficNotification
現在のナビゲーションセッションに関連するオブジェクトを返すコールバックを提供します。 これ NMATrafficNotification
には、 trafficNotificationInfo
プロパティを介して取得可能なトラフィック通知に関連付けられている NMATrafficNotificationInfo
インスタンスのリストが含まれています。
NMATrafficNotificationInfo
クラス NMATrafficNotificationType
は、トラフィック通知の詳細をカプセル化します。現在のルートに関するトラフィック通知のタイプを定義します。
NMATrafficNotificationInfo
次のプロパティとメソッドを使用して、インスタンスの詳細を取得できます。
-
type
- 交通通知情報のタイプ -
severity
- 現在のトラフィック通知イベントの重大度 -
affectedLength
- トラフィック通知イベントの長さ(メートル単位) -
distance
- 現在 NMAPositioningManager
の位置から交通通知までの距離を取得します
詳細については、 API リファレンス を参照してください。
交通渋滞回避モードが有効になっている代替ルートを検索しています
ナビゲーション管理者がナビゲーション中に現在の代替ルートを見つけた場合に呼び出されます。
注 : navigationManager:didFindAlternateRoutes:
とを混同しないでください navigationManager:didFindAlternateRouteWithResult:
。 navigationManager:didFindAlternateRoutes:
- 任意のルート。 navigationManager:didFindAlternateRouteWithResult:
- 改善されたルート。
navigationManager:didFindAlternateRoutes:
次に、実装の例を示します。
- (void) navigationManager:(nonnull NMANavigationManager*)navigationManager
didFindAlternateRoutes:(nonnull NMARouteResult *)routeResult
{
//** remove old alternative routes from current map if any
[self.activeMapView removeMapObjects: self.alternativeRoutes];
self.alternativeRoutes = [[NSMutableArray alloc] init];
//** enumerate all available alternative routes
for (NMARoute *route in routeResult.routes) {
//** Instantiate new map route object
NMAMapRoute *mapRoute = [[NMAMapRoute alloc] initWithRoute:route];
//** Install random color for the one route
mapRoute.color =
[UIColor colorWithHue:drand48() saturation:1.0 brightness:1.0 alpha:1.0];
//** Update internal storage
[self.alternativeRoutes addObject:mapRoute];
//** Show alternative route simultaneously with current guidance route
[self.activeMapView addMapObject:mapRoute];
}
}