ルート オプションを追加する
Routingアプリケーションの機能を高めるには、ユーザーのニーズに合わせてカスタマイズされた、さまざまなRouteOptionsを提供する必要があります。このセクションでは、利用可能なさまざまなルート検索機能について説明し、よりパーソナライズされた効率的なルート検索エクスペリエンスを構築できるようにします。
サポートされている移動モード
HERE SDK では次のルート タイプがサポートされています。
- **乗用車のルート案内:**乗用車ルートではリアルタイムおよび過去の交通情報を使用します。乗用車のルートは車が進入できる道路に従い、歩行者ゾーンなどの車が通行できない場所を回避します。さらに、一方通行などの道路制限や冬季閉鎖などの時間に基づく道路へのアクセスも考慮されます。
- **タクシーのルート案内:**乗用車ルートで使用できる機能に加え、タクシーの制限レーンと専用レーンも考慮されます。
- トラックのルート案内:乗用車ルートで使用できる機能に加え、トラック関連の制約やその他のユーザー指定のトラックオプションも考慮されます。
- **電気自動車 (EV) 用のルート:**EV ルートでは車両のエネルギー消費量を追跡できます。EV ルートを計算するときに充電スタンドをルートに追加することができ、ユーザーがエネルギーを使い果たすことなく目的地に到達できるようにします。同時に、全体的な移動時間と充電時間を最短にするためにルートが最適化されます。
- バスのルート案内ではバス専用レーンとバス制限レーンがサポートされています。
- 自家用バスのルート案内:都市部のバス専用道路は使用できないが、乗客の乗車場所および降車場所としてバス専用道路を使用する許可を得ている可能性がある、プライベートで運行しているバス会社用です。バス専用道路は、経由地がその道路上に設定されている場合にのみ使用されます。
- 歩行者のルート案内
- スクーターのルート案内:「スクーター」とは主に都市内の移動や輸送に使用される低出力の二輪車を指します。スクーター用のルートは高速道路や移動速度が 60km/時を超える道路を避けます。
OptimizationMode.fastestのみがサポートされています。専用のスクーターレーンはまだサポートされていません。 - **自転車のルート案内:**自転車のルートは、都市内を移動するカジュアルなサイクリストのために設計されたモードです。屋外のレーンや路面情報はサポートされていません。車属性と歩行者属性のみが使用されているため、たとえば自転車のレーンがある道路は優先されません。交通の方向に逆らって走行したり、公園外の歩行者専用区間を通行したりすることはできません。自転車のルート探索は、次のいずれかの条件に当てはまる場合に自転車で走行可能とされる歩行者用道路ネットワークを使用します。
- 道路が車と歩行者の両方に開放されている。
- 公園内の歩行者専用道路である。
- 自転車での通行は禁止されているが、自転車から降りて運びながら通行できる。この移行により、
SectionTransportModeが自転車から歩行者に変更されます。
- 公共交通機関用ルート:WGS-84 に準拠した出発点と終点に基づき、特定の都市や都市圏で利用可能なすべての公共交通機関モードを使用します。公共交通機関のオプションは
TransitRoutingEngineを使用して詳細にカスタマイズできます。 - フェリーとシャトルバスはルートの一部にのみ使用され、これを使用する場合は最適な経路が確保されます。使用する移動モードを変更すると、表示される
SectionTransportModeが変更されます。
注 (Navigateにのみ適用)
RoutingEngineでは、すべての移動モードをオンラインルート計算に使用できます。OfflineRoutingEngineでは、キャッシュに保存されたマップ データまたはダウンロードされたオフライン マップでのオフラインルート計算にも一部の移動モードを使用できます。サポートされているオフライン モードの概要については、こちらを参照してください。
HERE SDKは、スクーターと自転車に対してのみ二輪車機能をサポートしています。オートバイの場合は、たとえば高速道路を回避するなどのカスタマイズされたAvoidanceOptionsを使用して、乗用車モードを使用することをお勧めします。
すべての移動モードでEVオプションを使用できるわけではありません。
各ルートタイプはRoutingOptionsクラスで決定され、このクラスはすべての移動モードのルート計算を共通の方法で設定できます。目的の移動モードは、routingOptions.transportSpecification.transportModeで設定します。これらのオプションはRoutingEngineのcalculateRoute()メソッドに渡されます。
RoutingOptionsで設定できる移動モードは次のとおりです。
TransportMode.car:乗用車のルートを計算します (route.requestedTransportModeはTransportMode.car)。これがデフォルトです。TransportMode.truck:トラックのルートを計算します (route.requestedTransportModeはTransportMode.truck)。TransportMode.pedestrian:歩行者のルートを計算します (route.requestedTransportModeはTransportMode.pedestrian)。TransportMode.carまたはTransportMode.truckを使用し、RoutingOptions.evOptionsでElectricVehicleOptionsを設定することで、電気自動車のルートを計算できます。TransportMode.scooter:スクーターのルートを計算します (route.requestedTransportModeはTransportMode.scooter)。TransportMode.bicycle:自転車のルートを計算します (route.requestedTransportModeはTransportMode.bicycle)。TransportMode.taxi:タクシーのルートを計算します (route.requestedTransportModeはTransportMode.taxi)。TransportMode.bus:バスのルートを計算します (route.requestedTransportModeはTransportMode.bus)。TransportMode.privateBusで民間バス用ルートを計算する場合、route.requestedTransportModeはTransportMode.privateBusになります。TransitRouteOptions:公共交通機関のルートを計算します (TransitRoutingEngineでのみ利用可能) (route.requestedTransportModeはTransportMode.publicTransit)。
TransportMode は、ルート計算が完了した後にルート検索エンジンによって設定されます。getRequestedTransportMode() はルート オプションから移動モードを決定しますが、Route の Section ごとに異なる移動モードを設定できます。route.getSectionTransportMode() には、上記の移動モードに加え、特定のセクションに使用する必要がある実際の SectionTransportMode があり、FERRY や CAR_SHUTTLE_TRAIN などの移動モードも一覧表示されます。
デフォルトでは、出発地と目的地の経由地のみを通過する場合、最終的なルートには1つのルートSectionのみが含まれます。各 route オブジェクトには、設定されている経由地と移動モードの数に応じて、より多くのルート セクションを含めることができます。セクションは、ルートを複数の論理パーツに分割するルートレッグとして機能します。詳細についてはこちらを参照してください。
ルートを計算する前に、メインの移動モードがユーザーによって指定されますが、最終的な移動モードは Section ごとにルート検索エンジンによって設定されます。
注
Routeには複数のSectionTransportModeを含めることができます。このような場合、移動モードの違いがわかるように、ルートは別のSectionに分割されます。フェリーに乗るために車から出るときなど、移動モードを変更するには、基本的には移動の停止が必要です。ただし、マルチモーダル ルート検索 (またはインターモーダル ルート検索) はサポートされていません。乗用車のルートに目的地として公園内の観光スポットが含まれている場合、最後の経由地は乗用車で到達可能な公園の前の最後の場所にマップマッチングされ、ルートには歩行者セクションは含まれません。このようなギャップは、
RoutePlaceオブジェクトのoriginalCoordinatesとmapMatchedCoordinatesを比較することで検出できます。フォールバックとして適切な移動モードを使用して、これら 2 つの座標間の距離を新しいルート計算で埋めることをアプリケーションで決定できます。徒歩ではなくタクシーや公共交通機関を利用することを好むユーザーもいるため、このようなモーダル ルートは多数の異なるオプションで構成できます。HERE SDK ではこのようなモーダル ルートを個別のリクエストとしてのみサポートしているため、アプリケーションではフォールバック ロジックを実装する必要があります。代替策として Intermodal Routing API の使用を検討してください。ルートに沿ったすべての地理座標がマップマッチング (道路へのスナップとも呼ばれる) されます。
Waypointsがさらに追加された場合、それらもマップマッチングされ、元の座標はSectionの始まりと終わりを示すRoutePlace内のマップマッチングした座標と比較されます。
使用可能なすべてのルート オプションを使用すると、複数のパラメーターをさらに指定して、必要に応じてルート計算を最適化できます。
上記の各オプションには、共通 RouteOptions オブジェクトを格納するフィールドが含まれています。このオプションを使用すると、代替ルートの数などの一般的なオプションを指定できます。OptimizationMode で移動時間とルートの長さに基づいて最適なルートを検索することもできます。
注デフォルトでは、ルートは
fastestルート モードを使用して計算されます。
アルゴリズムを変更することもできます。たとえば、目的地に早く到達するときに、ルートの長さがそれほど重要ではない場合は、RouteOptions で fastest ルート モードを選択します。時間がそれほど重要ではなく、ルートを短くする場合は shortest を選択します。
最適なルートを見つけるために、ルート検索アルゴリズムではさまざまなパラメーターが考慮されます。これは、アルゴリズムが常に絶対的に最短または最速のルートを提供することを意味するものではありません。たとえば、次の道路ネットワークを考えてみましょう。

Illustration: Which route would you choose?
A 地点から B 地点への移動を計画するときは、4 つの異なる道路からいずれかを選択できます。緑のルートが高速道路を表しているとしましょう。この道路は、目的の都市にたどり着くうえで他のどのルートよりも距離が長いですが、最速のルートである可能性があります。
代わりに最短ルートを希望する場合は、黄色と赤のルートの方が短くても、アルゴリズムでは青色のルートが選択される場合があります。なぜそうなるのでしょうか。もちろん、黄色の道路は最短ルートですが、フェリーに乗る必要がある川を渡る必要があります。アルゴリズムではこれを時間がかかると見なす場合があります。したがって、結果として、赤や青のルートの方が黄色のルートよりわずかに距離は長いですが、優先される可能性があります。
他の 2 つのオプションを見てみましょう。青と赤のルートを比較する場合、ルート検索アルゴリズムでは青のルートの方が赤のルートよりわずかに長くても、青のルートを最短ルートとして推奨することがあります。通常、複数回右左折する必要のあるルートは、ドライバーにとって好ましくないためです。この場合、赤のルートには青のルートよりも多くの右左折が含まれていますが、青のルートはわずかに長いだけであるため、推奨ルートとなる場合があります。ルート検索アルゴリズムでは、右左折や他の多くの道路特性 (ドライバーの減速を引き起こす可能性のある信号機や踏切など) にペナルティが課されます。
注一般的なルート検索オプションに加え、トラックのルーティングなど、サポートされているさまざまな移動モードに特化したオプションがHERE SDKには用意されています。たとえば、
VehicleSpecificationでトラックの寸法を指定して、トラックが通過できる適切なルートのみを検索できます。この場合には、道路幅やトンネルの高さなどのパラメーターが考慮されます。すべての移動モードの車両固有の制限は、RoutingOptions.transportSpecificationのVehicleSpecificationで設定できます。
最終的なルートは特定の条件に基づいて最適化されますが、信頼できない状況が生じることがあります。ベルリン市内を巡る旅を想像してみてください。ベルリンの観光名所を巡りたい場合、最速ルートや最短ルートは選択肢に入らないでしょう。そのような場合は、追加の経由地を設定することをお勧めします。以下に例を示します。
複数の経由地を挿入する
デフォルトでは、出発地と目的地の経由地のみを通過する場合、最終的なルートには1つのルートSectionのみが含まれます。各ルート オブジェクトには、設定する経由地の数に応じて、さらに多くのルート セクションを含めることができます。セクションは、ルートを複数の論理パーツに分割するルートレッグとして機能します。
経由地とは、より多くのセクションまたはルートの形状を決定するためにユーザーが設定できる座標です (フェリーで川を横断する場合などに便利です)。
オンライン RoutingEngine でサポートされている経由地の数は、最大で約 200 個に制限されています。
経由地には次の 2 つのタイプがあります。
stopover:デフォルトの経由地タイプ。このポイントは必ず通過するため、運転指示のリストに表示され、ルートは複数のルート セクションに分割されます。passThrough:運転指示リストに表示されない場合があり、タッチ入力の結果など、ルートを形作るためのヒントとして扱われます。このタイプではルートは複数のセクションに分割されません。
新しい Waypoint オブジェクトを作成する場合、stopover タイプはデフォルトで設定されます。このタイプは、最初と最後の経由地で使用されるタイプである必要があります。2 つの経由地のみが出発地と目的地として機能する場合、ルートは次のようになります。

One route section between starting point and destination.
RoutingEngine では複数の経由地を処理できます。ベースとなるアルゴリズムでは、指定された配列と WaypointType の順序を考慮しながら、すべての経由地を通過する最適な経路を見つけようとします。各 stopover 経由地は出発地と目的地の間で渡されます。これらはそれぞれ、経由地リストの最初と最後のアイテムです。
let waypoint1GeoCoordinates = createRandomGeoCoordinatesInViewport()
let waypoint2GeoCoordinates = createRandomGeoCoordinatesInViewport()
let waypoints = [Waypoint(coordinates: startGeoCoordinates),
Waypoint(coordinates: waypoint1GeoCoordinates),
Waypoint(coordinates: waypoint2GeoCoordinates),
Waypoint(coordinates: destinationGeoCoordinates)]
let routingOptions = RoutingOptions()
routingEngine.calculateRoute(with: waypoints,
options: routingOptions) { (routingError, routes) in
if let error = routingError {
self.showDialog(title: "Error while calculating a route:", message: "\(error)")
return
}
let route = routes!.first
self.showRouteDetails(route: route!)
self.showRouteOnMap(route: route!)
self.logRouteViolations(route: route!)
}以下の図に示すように、コード スニペットを使用してルートに 2 つの stopover 経由地を追加することで、出発地と目的地の間に 3 つのルート セクションが作成されました。
注経由地リストの順序では、ルートに沿って渡される順序を定義します。

Illustration: Adding two additional waypoints.
目的地までの移動にかかる推定時間やルートの全長 (メートル単位) など、ルートに関する追加情報は以下のように Route オブジェクトから取得できます。
// estimatedTravelTimeInSeconds includes traffic delay.
let estimatedTravelTimeInSeconds = route.duration
let estimatedTrafficDelayInSeconds = route.trafficDelay
let lengthInMeters = route.lengthInMeters移動の時間と距離はSectionごとにも利用できます。
private func logRouteSectionDetails(route: Route) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
for (i, sections) in route.sections.enumerated() {
print("Route Section : " + String(i));
print("Route Section Departure Time : " + dateFormatter.string(from: sections.departureLocationTime!.localTime));
print("Route Section Arrival Time : " + dateFormatter.string(from: sections.arrivalLocationTime!.localTime));
print("Route Section length : " + "\(sections.lengthInMeters)" + " m");
print("Route Section duration : " + "\(sections.duration)" + " s");
}
}追加の stopover 経由地がない場合、ルートには 1 つの Section だけが含まれます。追加の stopover 経由地が指定されている場合、ルートは各経由地間、出発地から最初の経由地まで、および最後の経由地から目的地まで、複数のルート セクションに分割されます。
注
stopoverの追加の経由地を追加するとルートが複数のセクションに分割され、ルートはこのポイントを通過して、そのポイントの運転指示を生成するよう強制されます。
各 Section には GeoPolyline の形式でルートの形状が含まれており、最初の座標が出発点を示し、最後の座標が目的地を示す座標の配列として表されます。
これは、たとえば、Section ごとに異なる色の地図ポリラインを使用して、地図上でルートを視覚化するのに役立ちます。ただし、全体のポリラインを Route オブジェクトから直接取得することもできます。
マップ マッチングされた経由地を取得する
ルートを計算する場合、オフロードであっても、任意の場所を出発地、目的地、または中間の stopover や passThrough 経由地として使用できます。ただし、結果として得られるルートは、指定された経由地を正確に通過しない場合があります。ルート検索アルゴリズムでは、指定された座標にできる限り近づけようとします。これを実現するために、指定された移動モードなどのさまざまなパラメーターを考慮して、座標セットごとに最も近いルート セグメントを見つける高度な技術が HERE SDK には組み込まれています。このプロセスはマップ マッチングと呼ばれています。
ただし、ルートの形状はマップマッチングされた経由地のみで構成されます。
Route の各 Section について、セクションの先頭 (出発地) と最後 (到着地) で RoutePlace にアクセスできます。Routeplace には、パラメーターとして渡された mapMatchedCoordinates と originalCoordinates が含まれます。両方とも等しい場合もあれば、異なる場合もあります。異なる場合は、originalCoordinates が道路上にないことを意味します。
RoutePlace には、移動中に役立つ可能性のある詳細情報が含まれています。たとえば、電気自動車では役に立つ chargeInKilowattHours (以下を参照) や元の経由地の sideOfDestination とともに、chargingStation 情報にアクセスできます。

Illustration: Original and map-matched waypoints.
ルートに沿って移動しており、ストップオーバーとして道路から外れた観光スポットを指定したと想像してください。道路を走行しながらルートに沿って目的地に向かっているときにマップマッチングされた対応する経由地に到着すると、sideOfDestination フィールドには、観光スポット (または上図のレストラン) が現在移動している通りの左側と右側のどちらにあるかが表示されます。
場合によっては、指定されたストップオーバーが目の前、現在地の上または下にある場合もあります。このような場合、sideOfDestinationフィールドにはその場所がundefinedとして示されます。たとえば、湖に行こうとしていて道路が湖の目の前で終わる場合などです。
場所を経由地として設定する
SearchEngine から取得された Place には、1 つ以上のアクセス ポイントが含まれる場合があります。たとえば、大きな倉庫には複数の入口がある場合がありますが、倉庫の中心には直接には到達できない場合があります。アクセス ポイントは車で到達できることを想定していることに注意してください。
ルートの場合は、利用可能なアクセス ポイント (存在する場合) の 1 つに移動することをお勧めしますが、sideOfStreetHint はその場所の地理座標に設定します。アクセス ポイントが不明な場合、またはその場所に直接到達可能な場合、リストは空になります。
let accessPoints = place.accessPoints
// A Place always contains coordinates unless it is a suggestion.
var destinationWaypoint = Waypoint(coordinates: place.geoCoordinates!)
if !accessPoints.isEmpty {
// Set the first access point of a place as route destination.
destinationWaypoint.coordinates = accessPoints.first!
// When reaching destination provide a hint on the actual location of the place.
destinationWaypoint.sideOfStreetHint = place.geoCoordinates
}結果として得られる Route オブジェクトの RoutePlace には、経由地がアクセス ポイントに設定されたときに accessPoint に設定される RoutePlaceType が含まれます。
上の図を見て、sideOfStreetHint が RoutePlace の SideOfDestination にどのような影響を与えるかを確認してください。
場所に複数のアクセス ポイントがある場合、適切なアクセス ポイントの選択はユーザーが行います。
経由地を出発地として設定する
移動を開始するとき、適切な開始方向を選択するための RoutingEngine に追加のヒントを提供すると便利です。たとえば、必要な U ターンを強制する場合などです。
たとえば、次のように最初の進行方向を指定できます。
startWaypoint.headingInDegrees = location.bearingInDegreesユーザーが動いている場合には方位値がルート計算の改善に役立ちます。Location オブジェクトが測位ソースから取得され、ユーザーがすでに移動していた場合、このオブジェクトには方位値が含まれることに注意してください。そうでない場合、設定されない可能性があります。このようなシナリオは、たとえば、ユーザーが提案されたルートから逸脱した後でルートを再計算する必要がある場合など、案内中により一般的に発生する可能性があります。
経由地の順序を最適化する (Navigateでのみ使用可能)
OfflineEngine (上記を参照) では、オフラインでの経由地の順序の決定によって巡回セールスマンのユースケースをサポートすることもできます。この機能はオンライン RoutingEngine ではまだサポートされていません。
RouteOptions.optimizeWaypointsOrderを設定すると、Route沿いにある複数のストップオーバーのWaypointアイテムの順序を自動的に指定できます。trueに設定すると、OfflineRoutingEngineは経由地の順序を最適化して、stopoverタイプが設定されたすべての経由地を確実に経由しながら目的地に早く到着できるようにするか、ルートを短縮します。
指定された OptimizationMode によって、並べ替えの結果、より速いルートが得られるか、より短いルートが得られるかが決まります。
ルート計算への影響を確認するには、少なくとも 5 つ以上の経由地 (出発地と目的地を含む) を設定する必要があります。必要に応じて、各RoutePlaceのoriginalCoordinatesをユーザー定義の座標と比較することで、再シャッフルされた経由地を識別できます。ストップオーバーごとにルートが複数のセクションに分割されるため、RoutePlaceオブジェクトはRouteオブジェクトの各Sectionに提供されます。ナビゲーション中に、MilestoneStatus イベントはユーザー定義の経由地に到達したかどうかを通知します。

Illustration: A route with and without waypoint sequencing.
道路の特徴を除外する
トンネル、高速道路、低排気ガス規制ゾーン (LEZ)、地域、フェリー、通行料金、その他の道路フィーチャー (急な曲がり角など) を除外するには AvoidanceOptions を使用します。RoadFeatures、ZoneCategory、GeoBox、CountryCode 要素などのリストを渡すことができます。
RoadFeatures には、トンネルや有料道路などの道路固有のフィーチャーが含まれます。たとえば、すべての高速道路を旅程から除外するには、機能のリストにcontrolledAccessHighwayを追加します。
AvoidanceOptionsは、ローカライズや単位に関するオプションを含む他のルートオプションとともに、RoutingOptions.avoidanceOptionsで設定できます。これらのオプションはルートの計算時に読み込まれ、エンジンは指定された機能を回避するように動作します。

Screenshot: Two routes without and with an avoidance area.
設定されたオプションを回避できない場合、たとえば、閉鎖されたエリアからルートが始まる場合、提供された SectionNotice 要素でそのような違反を検査できます。これらが設定されている場合、そのようなルートを拒否することを決定できます。
道路セグメントを回避する
ルートの特定のセグメントを回避するには、AvoidanceOptionsを使用します。セグメントを回避するには、SegmentReferenceを使用します。Routeの各Spanには、それぞれのSpanに対するSegmentReferenceが含まれます。
次の例は、AvoidanceOptionsを使用してルートのセグメントを回避する方法を示しています。
let segmentReference = SegmentReference()
// The segmentId and tilePartitionId can be obtained from each span of the Route object.
// For example, the segmentId and tilePartitionId used below is part of the route created by above start and destination coordinates.
let segmentId = "here:cm:segment:807958890"
let tilePartitionId: UInt32 = 377894441
segmentReference.segmentId = segmentId
segmentReference.tilePartitionId = tilePartitionId
let avoidanceOptions = AvoidanceOptions()
avoidanceOptions.segments = [segmentReference]
routingOptions.avoidanceOptions = avoidanceOptionsSegmentReferenceはSegmentDataLoaderを通じて取得することもできます (Navigateでのみ使用可能)。実装の詳細については、「RoutingWithAvoidanceOptions」サンプルアプリを参照してください。
通行料金を取得する
ルートの個々のセクションに沿って考えられる通行料金を取得できます。
これには、窓に張るステッカーや道路税などのビネットの支払いの詳細に関する情報も含まれます。
注
OfflineRoutingEngineユーザーの場合、これはこの機能のベータリリースであるため、いくつかのバグや予期しない動作が発生する可能性があります。OfflineRoutingEngineはNavigateなどのライセンスで使用できます。RoutingEngineのユーザーの場合、この機能は安定しています。
通行料金を取得するには、routeOptions.enableTolls フラグを設定する必要があります。デフォルトでは false に設定されています。このフラグが有効な場合、「API リファレンス」で定義されているように、料金適用可能な移動モードの料金データがリクエストされます。
PaymentMethod、TollFare、一般的なToll情報を提供するsection.tolls経由で通行料金を取得します。
private func logTollDetails(route: Route) {
for section in route.sections {
// The spans that make up the polyline along which tolls are required or
// where toll booths are located.
let spans = section.spans
let tolls = section.tolls
if !tolls.isEmpty {
print("Attention: This route may require tolls to be paid.")
}
for toll in tolls {
print("Toll information valid for this list of spans:")
print("Toll systems: \(toll.tollSystems).")
print("Toll country code (ISO-3166-1 alpha-3): \(toll.countryCode).")
print("Toll fare information: ")
for tollFare in toll.fares {
// A list of possible toll fares which may depend on time of day, payment method and
// vehicle characteristics. For further details please consult the local
// authorities.
print("Toll price: \(tollFare.price) \(tollFare.currency).")
for paymentMethod in tollFare.paymentMethods {
print("Accepted payment methods for this price: \(paymentMethod).")
}
}
}
}
}
注 (Navigateにのみ適用)ナビゲーション中、つまりルートに従っている間、
isTollwayなどの新しい道路属性を通知するRoadAttributesDelegateを使用して、現在の道路で料金を支払う必要があるかどうかを知ることができます。さらに、TollStopWarningListenerは、今後の料金所に関するイベントを提供します。
公共交通機関ルートを取得する
TransitRoutingEngineを使用して、A地点からB地点までの公共交通機関のルートを計算します。A地点とB地点の間には複数の経由地があります。その方法については、GitHubの「PublicTransit」サンプルアプリで確認できます。
トラックルートを取得する
HERE SDK では、ルート計算のためにさまざまな移動モード (上記参照) がサポートされています。乗用車に合わせて最適化されたルートの計算方法を示した上記の例と同様に、トラックなどの他の移動タイプのルートも計算できます。
デフォルトオプションを設定することで、トラックに合わせて最適化されたルートを取得できますが、トラックに最適なルートを見つけるために利用できるオプションは他にも数多くあります。
たとえば、TransportMode.truckを指定したRoutingOptionsでは、TransportSpecification.TruckBuilderでVehicleSpecificationを設定することでトラックの寸法などを指定でき、任意で車両重量やその他のパラメーターを考慮する設定も適用できます。
トラックのターン・バイ・ターンナビ (Navigateでのみ使用可能) の詳細については、「トラックガイダンス」セクションを参照してください。
7 日前の更新










