iOS 開発者ガイド for SDK

車と徒歩での移動

SDK for iOS は、徒歩またはドライブ用に最適化された複数の経由地を使用したルート計算をサポートしています。

ルートは、 2 つ以上の経由地、出発地点、および目的地の間のパスを記述します。また、中間の経由地は任意です。 アプリケーションは、次の 2 つの方法でユーザーにルート情報を提供できます。
  • すべての経由地間の接続パスを表示する、マップ上にレンダリングされる行
  • テキスト形式でのターンバイターンの方向転換
注 : ルーティングバックエンドには 1 年の保持期間があるため、オンラインルーティング機能マップは年に 1 回以上更新する必要があります。 マップ データを更新するには [[NMAMapLoader sharedMapLoader] performMapDataUpdate] 、 API を使用します。

GitHub でのルーティング例

この機能を示す例について は、 https://github.com/heremaps/ (Obj-C) および https://github.com/heremaps/ (Swift) を参照してください。

NMACoreRouter

NMACoreRouter クラスは NMARoute 、経由地およびの一覧表を使用してを計算します NMARoutingModeNMACalculateResultBlock また、計算の進行状況を監視し、完了時に適切なコールバックメソッドをトリガするためのも提供されます。 ルートを計算するには calculateRouteWithStops:routingMode:completionBlock: 、メソッドを呼び出します。 別の NMACoreRouter インスタンスを使用して計算リクエストを起動することで、並列ルーティングリクエストを起動できます。

NMACoreRouter は、ルート計算を開始する前に dynamicPenalty プロパティを設定することで、トラフィックが考慮されたルートを計算することもできます。 NMADynamicPenalty クラスの詳細 については、「ダイナミックルーティングのペナルティ」を参照してください。

注意 :NMACoreRouter 変数は、厳密に参照され、保持されている必要があります ( クラスメンバーに作成された変数など ) 。 そうしないと、オブジェクトがスコープ外に移動し、ガベージコレクションされる可能性があります。

NMAWaypoint

NMACoreRouter は、経由地 AS NMAPlaceNMAPlaceLocation 、または NMAWaypoint のオブジェクトをサポートします。

を使用 NMAWaypoint して、自動車ルート計算に経由地の詳細を追加できます。 これらの詳細には、経由地が意図的なストップオーバーであるか、またはルートが通過する必要があるパススルーポイントであるかが含まれます。 ストップオーバーまたはパススルー経由地が含まれているルートが異なる場合があるため、これはルーティングに影響します。 たとえば、計算されたルートでは、ストップオーバー後の U ターン操作が提案され、パススルー経由地と同じ場所にあるルートでは、同じ道路を走行することが推奨されます。 パススルー経由地タイプは、 CAR ルートでのみサポートされ、他のルートタイプではサポートされません。

NMARoutingMode

NMARoutingMode このクラスは、次 NMARoute のようなの計算に必要なパラメータのモデルです。
  • routingType - 最速、最短などのルーティングタイプ
  • transportMode - 輸送手段
  • routingOptions - NMARoutingOption このルートに適用されるルーティングオプション(列挙体で表されます)
  • startDirection - ルートが開始する進行方向。 デフォルトでは、最速のルートを達成するために「任意の方向」に設定されています
  • departureTime - ルートの出発時間
  • resultLimit - 計算する代替ルートの最大数 ( 実際の結果数がこの制限よりも少ない可能性があります )
注 : ルーティングタイプは、ルートの計算中に適用できるさまざまな最適化を記述します。
  • Fastest - 出発地点から目的地までのルートの計算が、移動時間によって最適化されます。 場合によっては、最速モードで返されたルートが最短の移動時間を持つルートではないことがあります。 たとえば、迂回路や脇道を通る近道を利用して、短時間の移動が可能な場合でも、高速道路に残っているルートが適しています。
  • Shortest - 開始地点から目的地までのルート計算で、速度情報が無視されます。 このモードでは、ルートを適切に保ちながら、ルートの距離が最小化されます。 これには、たとえば、ターンのペナルティが含まれます。 そのため、結果として生じるルートは必ずしも最短距離のルートであるとは限りません。
  • Balanced - 出発地点から目的地までのルート計算を行い、移動時間と走行距離の組み合わせに基づいて最適化します。
注 :HERE SDK では、 2 つの経由地間のルート計算から複数のルートを戻すことができます。 このNMARoutingModeクラスを使用して必要なルート数を設定 すると、 HERE SDK はこの制限に従って異なるルートを返します。 返された配列の最初の要素がルーティングオプションに基づいた最適な結果であり、返されたルートの REST は特定の順序で一覧表示されないことに注意してください。

NMARTE

NMARoute このクラスは、 2 つ以上の経由地を接続する別個の計算パスを表し、操作およびルートリンクのリストで構成されます。 NMACoreRoutercalculateRouteWithStops:routingMode:completionBlock: メソッドの呼び出しによってルート計算がトリガーされますが、返された NSProgress オブジェクトと NMACalculateResultBlock ブロックを使用して操作を監視し、結果の NMARoute オブジェクトを処理できます。

NMARoute オブジェクトには、次の 1 つ以上のメソッドを呼び出してアクセスできるルート情報が含まれています。
  • routingMode - NMARoutingMode ルートの
  • waypoints - ルートのすべての経由地の配列
  • start - ルートの開始経由地
  • destination - ルートの宛先経由地
  • maneuvers - ルートの操作の配列
  • length - ルートの長さ ( メートル単位 )
  • ttaIncludingTrafficForSubleg - NMARouteTta ルート計算時の交通状況を考慮して到着する推定時間を示す
  • ttaUsingDownloadedTrafficForSubleg - NMARouteTta デバイスにダウンロードされたトラフィックデータから交通状況が取得されている間の、交通状況に伴う到着予定時間を示す
  • ttaExcludingTrafficForSubleg - NMARouteTta 交通状況を考慮せずに到着予定時間を示す
  • boundingBox - NMAGeoBoundingBox ルート全体が含まれている最小値を取得します
  • routeGeometry - NMAGeoCoordinates ルート沿いのすべての配列を取得します
  • mapPolyline - NMAMapPolyline ルートのリプレゼンテーションを取得します

NMALOUTETTA

NMARouteTta ( 「到着までの時間」 ) クラスは、車両プールの制約、ターンアラウンドの制約、道路の渋滞など、走行時間に影響を与える所要時間やルートの詳細など、ルートに関する有用な情報を提供します。 たとえば、計算されたルートの期間を取得するに tta は、プロパティを使用します。 たとえば、

NSTimeInterval duration = [route ttaExcludingTrafficForSubleg:NMARouteSublegWhole].duration;

ttaForSubleg: メソッドを使用して、ルートからサブレッグの期間を取得することもできます。 たとえば、

if (myRoute.sublegCount > 0)
{
  NSTimeInterval duration = [myRoute ttaExcludingTrafficForSubleg:0].duration;
}

トラフィックアウェアルーティングと NMALOTTA

この NMARoute クラスには、トラフィックを反映する別の NMARouteTta 結果セットを提供する ttaIncludingTrafficForSubleg メソッドと ttaUsingDownloadedTrafficForSubleg メソッドもあります。 トラフィックペナルティモードを設定してルートが最初に計算された場合 ttaIncludingTrafficForSubleg 、メソッドは、ルート計算時に交通状況に合わせて到着までの推定時間を返します。 値はルート計算時に 1 回計算され、時間とともに変更されません。ルートが戻されてから経過した時間が(ttaIncludingTrafficForSubleg を使用して取得した)到着までの時間を正確にするのに十分な大きさである場合に ttaUsingDownloadedTrafficForSubleg 使用してください。 交通状況が変化した場合。 NMATrafficManager クラスを使用して交通データが頻繁に更新されていれば、到着予定時刻のより最新の見積もりが ttaUsingDownloadedTrafficForSubleg 提供されます。

ルート ttaIncludingTrafficForSubleg 計算時の交通状況を考慮して、到着までの時間を取得するためのコード スニペットの使用方法。
...
NMADynamicPenalty *penalty = [[NMADynamicPenalty alloc] init];
penalty.trafficPenaltyMode = NMATrafficPenaltyModeOptimal;
coreRouter.dynamicPenalty = penalty;
[coreRouter calculateRouteWithStops:stops routingMode:routingMode
  completionBlock:^(NMARouteResult *routeResult, NMARoutingError error) { ... }];
NSTimeInterval duration = [route ttaIncludingTrafficForSubleg:NMARouteSublegWhole].duration;

ダウンロードしたトラフィックデータに基づいて期間を計算する必要がある場合は、次の手順を実行して、トラフィックデータの入力を要求することもできます。

[[NMATrafficManager sharedTrafficManager] requestTrafficOnRoute:route];
// Wait for the callback that the traffic data has been downloaded: trafficDataDidFinish
NSTimeInterval durationWithTraffic = [route ttaUsingDownloadedTrafficForSubleg:NMARouteSublegWhole].duration;
注 : トラフィック対応ルートの計算では、超過したオプションが返される場合があります。 詳細 については、「ルーティング関連の列挙体」および「 API リファレンス 」を参照してください。

NMAManeuver

NMAManeuver このクラスは、計算された内で 1 つのセグメントから次のセグメントに移動するために必要なアクションを表し NMARouteます。 NMAManeuver 各オブジェクトは、次のような情報を提供します。
  • 操作の場所
  • 操作を完了するために必要な操作
  • 操作間の距離
  • 現在の道路
  • 次の道路
  • 操作の推定時間
  • 入口、出口、または合流情報を示す高速道路の標識 ( ある場合 )
  • この操作の一部を表すルートエレメントのリスト
詳細については、 API リファレンス を参照してください。

NMALOUTEElement および NMARoadElement

NMARouteElement および NMARoadElement は、操作の一部を表します。 たとえば、ドライバーに左折を要求してから通りに出るように指示する場合がありますが、この通りはトンネル、泥道、トール道路などの複数のセクションで構成されていることがあります。 この状況では、操作に複数 NMARouteElement のオブジェクトが含ま NMARoadElement れており、各エレメントに道路の個々のセクションに関する情報をアプリケーションに提供できるプロパティが含まれています。

NMAMapRoute

NMAMapRoute このクラスは、 NMAMapObject 地図に計算されたルートを表示するのタイプです。 通常、アプリケーションはルート計算後に NMAMapRoute を作成し、 NMAMapView addMapObject: を呼び出してマップに NMAMapRoute 追加します。

renderType プロパティと NMAMapRoute API を使用して、地図のルートの色をカスタマイズできます。 サポートされているレンダリングタイプの値は NMAMapRouteRenderTypePrimary、、 NMAMapRouteRenderTypeSecondary、の 3 つ NMAMapRouteRenderTypeUserDefinedです。 デフォルト NMAMapRoute では、は事前定義された色のプライマリセットに設定され、セカンダリレンダリングタイプは代替ルートを示すように設計されています。 NMAMapRouteRenderTypeUserDefined を使用すると、 color および traveledColor プロパティを使用して、任意の ARGB カラーにルートのカラーを設定できます。

図 1. プライマリ RenderType を使用しています
図 2. セカンダリ RenderType を使用しています
図 3. ユーザー定義のルートの色

たとえば、 2 つの経由地(開始および宛先)を接続するルートをレンダリングする場合は、次のアプリケーションロジックを追加できます。

図 4. NMAMapRoute にが追加されました NMAMapView
  1. を作成します NMACoreRouter
    // Create a NMACoreRouter.
    NMACoreRouter* coreRouter = [[NMACoreRouter alloc] init];
  2. NSMutableArray を作成し、 2 つの NMAGeoCoordinates 経由地
    NMAGeoCoordinates* geoCoord1 = [[NMAGeoCoordinates alloc] initWithLatitude:49.1966286 longitude:-123.0053635];
    NMAGeoCoordinates* geoCoord2 = [[NMAGeoCoordinates alloc] initWithLatitude:49.1947289 longitude:-123.1762924];
    
    NMAWaypoint* waypoint1 = [[NMAWaypoint alloc] initWithGeoCoordinates:geoCoord1];
    NMAWaypoint* waypoint2 = [[NMAWaypoint alloc] initWithGeoCoordinates:geoCoord2];
    
    NSMutableArray* stops = [[NSMutableArray alloc] initWithCapacity:4];
    [stops addObject:waypoint1];
    [stops addObject:waypoint2];
    を追加します
  3. を作成し NMARoutingMode 、その NMATransportModeNMARoutingTypeNMARoutingOption およびの値を設定します
    NMARoutingMode* routingMode = [[NMARoutingMode alloc]
        initWithRoutingType:NMARoutingTypeFastest
        transportMode:NMATransportModeCar
        routingOptions:0];
  4. 交通状況を考慮しながらルートを計算する場合は、次のフラグを設定します。
    NMADynamicPenalty *penalty = [[NMADynamicPenalty alloc] init];
    penalty.trafficPenaltyMode = NMATrafficPenaltyModeOptimal;
    coreRouter.dynamicPenalty = penalty;
  5. ルートを計算し、ルート計算の結果を受信します。
    [coreRouter calculateRouteWithStops:stops routingMode:routingMode
        completionBlock:^(NMARouteResult *routeResult, NMARoutingError error) {
    
          // If the route was calculated successfully
          if (!error && routeResult && routeResult.routes.count > 0)
          {
            NMARoute* route = [routeResult.routes objectAtIndex:0];
            // Render the route on the map
            NMAMapRoute* mapRoute = [NMAMapRoute mapRouteWithRoute:route];
            [mapView addMapObject:mapRoute];
    
            // To see the entire route, we orient the map view accordingly
            [mapView setBoundingBox:route.boundingBox
                    withAnimation:NMAMapAnimationLinear];
          }
          else if (error)
          {
            // Display a message indicating route calculation failure
          }
        }];
    
    注 : NMARoutingErrorViolatesOptions エラーが発生した場合でも、ルートが返されます。 ルーティングオプションに違反するこれらのルート結果は、ユーザーが処理する必要があります。

ダイナミックルーティングのペナルティ

を使用 NMADynamicPenalty して、ルート探索の計算時に適用される道路およびエリア制限要因のポリシーを作成できます。 たとえば、このクラスを使用して、あるエリアの走行速度が通常より 50% 遅くなっていることを示します。 NMADynamicPenalty このクラスで trafficPenaltyMode は、プロパティを介したルート計算で交通イベントを処理するために使用されるモードを設定することもできます。

dynamicPenalty プロパティを設定することで、アクティブなポリシーを変更 NMACoreRouterできます。 制限を考慮するには、ルート計算の前にポリシーを設定する必要があります。

交通イベントオブジェクトを取得しています

NMATrafficManager このクラスを使用して、道路閉鎖や渋滞などの交通イベントを取得できます。 これは、アプリが特定のルートの現在のトラフィックイベントのリストを表示する必要がある場合に役立ちます。

の使用 NMATrafficManager は、 2 つのステップから成るプロセスです。 まず、 method: requestTrafficOnRoute: メソッドを使用して目的のルートでイベントを取得します。
NSNumber *requestID = [[NMATrafficManager sharedTrafficManager] requestTrafficOnRoute:myRoute];
requestTrafficOnRoute: メソッドは、現在のトラフィックデータをデバイスにダウンロードする非同期要求を起動します。
注 : トラフィック NMAMapView を表示するようにが設定されている場合、トラフィックデータも定期的にダウンロードされます。 ただし requestTrafficOnRoute: 、を使用してトラフィックイベントを取得する前に、明示的に呼び出すことをお勧め NMATrafficManagerします。
trafficDataDidFinish コールバックが成功すると、次のいずれかの方法を使用して、特定のルートまたはルート要素に影響を与えるトラフィックイベントのリストを取得できます。
  • getTrafficEventsOnRoute:withCompletion:
  • getTrafficEventsOnRouteElements:withCompletion:

オフラインルーティング

SDK for iOS で開発されたアクティブなデータ接続アプリケーションがなくても、ある場所から別の場所への移動を支援するためのルーティング情報を要求できます。

アプリケーションユーザーは、ルートを計算して地図に表示するために、アクティブなデータ接続を維持する必要はありません。 オフライン中にルーティングリクエストを実行するための更新されたマップおよびデータベース情報を事前にダウンロードできます。 たとえば、ユーザーがカリフォルニア州とオレゴン州のオフライン地図をダウンロードした場合、サンディエゴからポートランドまでのルートをデータに接続せずに作成できます。

オフライン地図のダウンロードの詳細 については、「マップ データのプリロード」を参照してください。

注 : HERE SDK v3.4 では、ルーティング接続モード(NMARequestConnectivity)の動作が SDK の他の部分とより整合性を保つように更新されました。
  • 「デフォルト」の接続モードを使用してリクエストを開始すると NMAApplicationContext 、そのリクエストは接続設定に従って実行されます。 NMAApplicationContext がオンラインモードに設定されているときにデバイスがオフラインの場合、要求は失敗します。
  • 「オンライン」接続モードを使用してリクエストを開始すると NMAApplicationContext 、接続設定に関係なくオンラインリクエストが実行されます。
  • 「オフライン」接続モードを使用してリクエストを開始すると NMAApplicationContext 、接続設定に関係なくオフラインリクエストが実行されます。
いずれの場合も、要求が失敗しても、フォールバックアクションは自動的には実行されません。

ルーティング関連の列挙体

ルート計算では 次のものを含む HERE SDK 列挙体を使用します。
  • NMARoutingType 列挙型 (enum) : NMARoutingTypeFastest またはなどのさまざまなルーティングタイプを記述する値を表します NMARoutingTypeShortest
  • NMATransportMode 列挙型 (enum) - NMATransportModeCar またはなどのさまざまな転送モードを記述する値を表します NMATransportModePedestrian
  • NMARoutingOption 列挙型 (enum) - NMARoutingOptionAvoidBoatFerry またはなどのルート計算の特殊な条件を記述する値を表し NMARoutingOptionAvoidTollRoadます。 この 列挙型 (enum) の値は、ルートの計算後にも返され、ルート結果が違反するオプションを示します
  • NMARouteViolatedOption 列挙型 (enum) - に加えて、ルート計算で違反した特別な条件を記述する値を表し NMARoutingOptionます。 この 列挙型 (enum) には、道路の渋滞および曲がる際の制限に関する値が含まれています。 たとえば、通行料やフェリーを回避するルート計算を指定した後、 NMARouteViolatedOptionBlockedRoad 違反があるオプション NMARoute が表示されることがあります。 ルートが見つかりましたが、このルートは少なくとも 1 つのブロックされた道路を通過し、ルートリクエストの条件に違反しています
    注 : がない NMARouteViolatedOptionBlockedRoad 場合、必ずしもルートで道路がブロックされていないことを示しているわけではありません。 これは、交通情報が利用できない場合や、ルート計算で有効になっていない場合に特に当てはまります。
  • NMARoutingError 列挙型 (enum) : NMARoutingErrorNone やなどのルート計算エラーを記述する値を表します NMARoutingErrorViolatesOptions