車と徒歩での移動
SDK for Android は、徒歩または運転用に最適化された複数の経由地を使用したルート計算をサポートしています。 ルートは、 2 つ以上の経由地、出発地点、および目的地の間のパスを記述します。また、中間の経由地は任意です。 アプリケーションは、次の 2 つの方法でユーザーにルート情報を提供できます。
- すべての経由地間の接続パスを表示する、マップ上にレンダリングされる行
- テキスト形式でのターンバイターンの方向転換
MapLoader.getInstance().performMapDataUpdate()
、 API を使用します。 GitHub でのルーティング例
この機能の例について は、 https://github.com/heremaps/を参照してください。
ルート計算クラス
CoreRouter
RoutePlan
RouteWaypoint
RouteOptions
このCoreRouter
クラスは 、車 、歩行者、トラックのルートを計算する責任があります。 アプリケーションは、オプションを提供するCoreRouter.calculateRoute(RoutePlan, CoreRouter.Listener)
メソッドを呼び出してルート計算を開始し、Router.Listener
インスタンスを介して進行状況イベントをRoutePlan
経由地で送受信できます。
CoreRouter
は、Route.TrafficPenaltyMode
setDynamicPenalty(DynamicPenalty)
を使用するか、またはcalculateRoute()
を呼び出す前に、トラフィックが考慮されたルートを計算することもできます。 DynamicPenalty
クラスの詳細 については、「ダイナミックルーティングのペナルティ」を参照してください。 RoutePlan
ルートの計算に使用される経由地コンテナです。 RoutePlan
オブジェクトは、経由地オブジェクトのリストで構成 RouteOptions
され、オプションです。 RouteOptions
が指定されていない場合は、デフォルト値が使用されます。
を使用 RouteWaypoint
して、ルート計算に経由地の詳細を追加できます。 これらの詳細には、経由地が意図的なストップオーバーであるか、またはルートが通過する必要があるパススルーポイントであるかが含まれます。 ストップオーバーまたはパススルー経由地が含まれているルートが異なる可能性があるため、これはルーティングに影響します。 たとえば、計算されたルートでは、ストップオーバー後の U ターン操作が提案され、パススルー経由地と同じ場所にあるルートでは、同じ道路を走行することが推奨されます。 パススルー経由地タイプは、 CAR ルートでのみサポートされ、他のルートタイプではサポートされません。
RouteOptions
このクラスは、 1 つのルートの計算に必要なパラメータのモデルです。 次のようなルートの「ビルディングブロック」パラメータをカプセル化します。
- 目的のルート数
- ルートが開始する進行方向
- 最速の移動時間や最短距離などのルーティングタイプ
- 出発時間
- 未舗装道路や高速道路など、許容されるルートセグメントのタイプ
-
Fastest
- 出発地点から目的地までのルートの計算が、移動時間によって最適化されます。 場合によっては、最速モードで返されたルートが最短の移動時間を持つルートではないことがあります。 たとえば、迂回路や脇道を通る近道を利用して、短時間の移動が可能な場合でも、高速道路に残っているルートが適しています。 -
Shortest
- 開始地点から目的地までのルート計算で、速度情報が無視されます。 このモードでは、ルートを適切に保ちながら、ルートの距離が最小化されます。 これには、たとえば、ターンのペナルティが含まれます。 そのため、結果として生じるルートは必ずしも最短距離のルートであるとは限りません。 -
Balanced
- 走行時間と走行距離の組み合わせに基づいて最適化された、出発地点から目的地までのルート計算。
HERE SDK は、 2 つの経由地間の代替ルートをサポートします。 代替ルート機能を使用すると、ルートの計算後に複数のルートを戻すことができます。 RouteOptions
このクラスを使用して、必要なルート数を設定できます。 HERE SDK は、この制限に従って異なるルートを返します。 返されたリストの最初の要素 RouteResult
はメインルートであり、返されたルートの REST は特定の順序で一覧表示されません。
GRAPH_DISCONNECTED
、エラーが発生することがあります。 これは、処理できる計算済みルートの複雑さとサイズの制限によるものです。 ルート数が多いほど、ルートがより複雑になり、この制限を超える可能性が高くなります。 RouteResult および Route
RouteResult
このクラスは、ルート計算結果を表します。 アプリケーションは Route
、オブジェクトおよび違反した一連のルーティング条件を取得できます。 違反したルーティングオプション は、ルーティング結果が準拠できなかった条件です。 たとえば、通行料やフェリーを回避するルート計算を指定した後、RouteResult.ViolatedOption.AVOID_TOLL_ROADS
と一緒にRoute
オブジェクトを含むRouteResult
を取得できます。 ルートが見つかりましたが、このルートは少なくとも 1 つのトールロードを通過し、ルートリクエストの条件に違反しています。
Route
このクラスは、複数の経由地を接続する別個の計算パスで、操作およびルートリンクのリストで構成されています。 を使用 CoreRouter.calculateRoute(RoutePlan, CoreRouter.Listener)
してルート計算をトリガーすることで、アプリケーションはを使用して CoreRouter.Listener
計算を監視し、コールバックメソッドをトリガーできます。 これらのコールバックメソッドには、計算 RouteResult
されたオブジェクトのリストを含むパラメータがあります。 これら RouteResult
のオブジェクトを使用 getRoute()
してを呼び出し、ルートを取得できます。
このRoute
クラスには、 トラフィックを反映する別のRouteTta
結果セットを提供するgetTtaIncludingTraffic
メソッドとgetTtaUsingDownloadedTraffic
メソッドもあります。 トラフィックペナルティモードを設定してルートが最初に計算された場合 getTtaIncludingTraffic
、メソッドは、ルート計算時に交通状況に合わせて到着までの推定時間を返します。 値はルート計算時に 1 回計算され、時間とともに変更されません。 getTtaUsingDownloadedTraffic
ルートが戻されてから経過した時間が到着までの時間に十分な大きさである場合に使用してください(を使用して取得 getTtaIncludingTraffic
) 交通状況の変化により、正確ではなくなりました。 TrafficUpdater
この方法では、クラスを使用してルートのトラフィックデータが最初にダウンロードされた場合に、到着までのより最新の推定時間が提供されます。
MapRoute マップ オブジェクト
MapRoute
このクラスは、 MapObject
地図に計算されたルートを表示するのタイプです。 通常、アプリケーションは、Map.addMapObject(MapRoute)
を呼び出して MapRoute をマップに追加する前に、関連するRoute
オブジェクトをパラメータとしてMapRoute(Route)
コンストラクタに渡すルート計算の後にMapRoute
を作成します。
RenderType
および MapRoute
API を使用して、マップルートの色をカスタマイズできます。 サポートされているレンダリングタイプの値は PRIMARY
、、 SECONDARY
、の 3 つ USER_DEFINED
です。 デフォルトでは、は MapRoute
事前定義された色のプライマリセットに設定され、セカンダリレンダリングタイプは代替ルートを示すように設計されています。 RenderType.USER_DEFINED
を使用すると、任意の ARGB カラーsetColor(int)
setTraveledColor(int)
に電話をかけたり、ルートカラーを設定したりできます。
![]() | ![]() |
![]() |
MapRoute.setRenderType(RenderType)
は MapRoute
、に追加された後にのみ呼び出す Map
ことができます。 
たとえば、 2 つの経由地(開始および宛先)を接続するルートをレンダリングする場合は、次のアプリケーションロジックを追加できます。
-
CoreRouter
インスタンスを宣言します。// Declare the variable (the CoreRouter) CoreRouter router = new CoreRouter();
RoutePlan
を作成 し、 2 つのGeoCoordinate
経由地を追加します。// Create the RoutePlan and add two waypoints RoutePlan routePlan = new RoutePlan(); routePlan.addWaypoint(new RouteWaypoint(new GeoCoordinate(49.1966286, -123.0053635))); routePlan.addWaypoint(new RouteWaypoint(new GeoCoordinate(49.1947289, -123.1762924)));
- 新しい
RouteOptions
オブジェクトを作成し、適切なRouteOptions
メソッドを呼び出してそのオブジェクトとType
TransportMode
値を設定してから、RoutePlan
に追加します。// Create the RouteOptions and set its transport mode & routing type RouteOptions routeOptions = new RouteOptions(); routeOptions.setTransportMode(RouteOptions.TransportMode.CAR); routeOptions.setRouteType(RouteOptions.Type.FASTEST); routePlan.setRouteOptions(routeOptions);
- ルート計算で
Route
、MapRoute
マップ上でレンダリングするインスタンスを作成するために使用できるオブジェクトを返すことができるようにするにCoreRouter.Listener
は、適切なアクティビティクラスにを実装して内部クラスを追加します。private class RouteListener implements CoreRouter.Listener { // Method defined in Listener public void onProgress(int percentage) { // Display a message indicating calculation progress } // Method defined in Listener public void onCalculateRouteFinished(List<RouteResult> routeResult, RoutingError error) { // If the route was calculated successfully if (error == RoutingError.NONE) { // Render the route on the map mapRoute = new MapRoute(routeResult.get(0).getRoute()); map.addMapObject(mapRoute); } else { // Display a message indicating route calculation failure } } }
- 内部リスナークラス (
RouteListener
この例ではという名前 ) を追加した後、を呼び出しCoreRouter.calculateRoute(RoutePlan, CoreRouter.Listener)
てルートを計算します。CoreRouter.Listener
が拡張されます。Router.Listener<List<RouteResult>, RoutingError>
// Calculate the route router.calculateRoute(routePlan, new RouteListener());
ダイナミックルーティングのペナルティ
を使用 DynamicPenalty
して、ルート探索の計算中に適用される道路およびエリア制限要因のポリシーを作成できます。 たとえば、このクラスを使用して、あるエリアの走行速度が通常より 50% 遅くなっていることを示します。 DynamicPenalty
このクラスで setTrafficPenaltyMode(TrafficPenaltyMode)
は、メソッドを介したルート計算でトラフィックイベントを処理するために使用されるモードを設定することもできます。
を呼び出して、アクティブなポリシー CoreRouter.setDynamicPenalty(DynamicPenalty)
を変更できます。 制限を考慮するには、ルート計算の前にポリシーを設定する必要があります。
交通イベントオブジェクトを取得しています
TrafficUpdater
このクラスを使用して、道路閉鎖や渋滞などの交通イベントを取得できます。 トラフィックアップデータを使用する前 TrafficUpdater.enableUpdate(boolean update)
に、経由でトラフィックリクエストを有効にする必要があります。
TrafficUpdater
は、 2 つのステップから成るプロセスです。 まず、を作成 TrafficUpdater.Listener
し、次のいずれかの方法で使用します。 -
request(GeoCoordinate center, Listener listener)
- 指定した中心座標とデフォルトの半径でトラフィックを要求します -
request(GeoCoordinate center, int radius, Listener listener)
- 指定された中心座標と半径でトラフィックを要求します -
request(Route route, Listener listener)
- 指定されたルートのトラフィックおよび各経由地を囲むデフォルトの半径を要求します -
request(Route route, int radius, Listener listener)
- 各経由地の周りの特定のルートおよび半径のトラフィックを要求します -
request(RouteElements elements, Listener listener)
- ルート要素 ()RouteElement
オブジェクトのトラフィックを要求します
TrafficUpdater.Listener
状態とともに)成功したコールバック From に、 TrafficUpdater.RequestState.DONE
次のいずれかの方法を使用して、特定のルートまたはルート要素に影響を与えるトラフィックイベントのリストを取得する必要があります。 -
getEvents(Route route, GetEventsListener listener)
-
getEvents(RouteElement element, GetEventsListener listener)
-
getEvents(List<RouteElement> elements, GetEventsListener listener)
-
getEvents(RouteElements elements, GetEventsListener listener)
TrafficUpdater.GetEventsListener
1 つのコールバック方式が含ま onComplete(List<TrafficEvent> events, Error error)
れています。この方式では、新たに更新されたトラフィックイベントのリストが提供されます。
ルーティング関連の列挙体
ルート計算では 、 次のものを含む HERE SDK 列挙体を使用します。
- 列挙型 (
Route.TrafficPenaltyMode
enum) -DISABLED
、AVOID_LONG_TERM_CLOSURES
、OPTIMAL
などのルート計算で、CoreRouter
がトラフィックイベントを処理する方法を記述する値を表します -
RouteOptions.Type
列挙型 (enum) -FASTEST
やなどのさまざまなルーティングタイプを記述する値を表しますSHORTEST
-
RouteOptions.TransportMode
列挙型 (enum) -CAR
、TRUCK
(TRACK
直線で経由地を接続する ) 、、、などのさまざまな転送モードを記述する値を表しますPEDESTRIAN
-
RoutingError
列挙型 (enum) -NONE
やなどのルート計算エラーを記述する値を表しますVIOLATES_OPTIONS
-
RouteResult.ViolatedOption
列挙型 (enum) -AVOID_HIGHWAYS
またはなどのルートオプション違反の可能性を示す値を表しますAVOID_FERRIES