SDK for Android 開発者ガイド

車と徒歩での移動

SDK for Android は、徒歩または運転用に最適化された複数の経由地を使用したルート計算をサポートしています。 ルートは、 2 つ以上の経由地、出発地点、および目的地の間のパスを記述します。また、中間の経由地は任意です。 アプリケーションは、次の 2 つの方法でユーザーにルート情報を提供できます。

  • すべての経由地間の接続パスを表示する、マップ上にレンダリングされる行
  • テキスト形式でのターンバイターンの方向転換
注 : ルーティングバックエンドには 1 年の保持期間があるため、オンラインルーティング機能マップは年に 1 回以上更新する必要があります。 マップ データを更新するには MapLoader.getInstance().performMapDataUpdate() 、 API を使用します。

GitHub でのルーティング例

この機能の例について は、 https://github.com/heremaps/を参照してください。

ルート計算クラス

この項では、ルートの計算に使用される次のクラスについて説明します。
  • CoreRouter
  • RoutePlan
  • RouteWaypoint
  • RouteOptions

このCoreRouterクラスは 、車 、歩行者、トラックのルートを計算する責任があります。 アプリケーションは、オプションを提供するCoreRouter.calculateRoute(RoutePlan, CoreRouter.Listener)メソッドを呼び出してルート計算を開始し、Router.Listenerインスタンスを介して進行状況イベントをRoutePlan経由地で送受信できます。

注 : CoreRouterは、Route.TrafficPenaltyModesetDynamicPenalty(DynamicPenalty)を使用するか、またはcalculateRoute()を呼び出す前に、トラフィックが考慮されたルートを計算することもできます。 DynamicPenalty クラスの詳細 については、「ダイナミックルーティングのペナルティ」を参照してください。

RoutePlan ルートの計算に使用される経由地コンテナです。 RoutePlan オブジェクトは、経由地オブジェクトのリストで構成 RouteOptionsされ、オプションです。 RouteOptions が指定されていない場合は、デフォルト値が使用されます。

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

RouteOptions このクラスは、 1 つのルートの計算に必要なパラメータのモデルです。 次のようなルートの「ビルディングブロック」パラメータをカプセル化します。

  • 目的のルート数
  • ルートが開始する進行方向
  • 最速の移動時間や最短距離などのルーティングタイプ
  • 出発時間
  • 未舗装道路や高速道路など、許容されるルートセグメントのタイプ
注 : ルーティングタイプは、ルートの計算中に適用できるさまざまな最適化を記述します。
  • Fastest - 出発地点から目的地までのルートの計算が、移動時間によって最適化されます。 場合によっては、最速モードで返されたルートが最短の移動時間を持つルートではないことがあります。 たとえば、迂回路や脇道を通る近道を利用して、短時間の移動が可能な場合でも、高速道路に残っているルートが適しています。
  • Shortest - 開始地点から目的地までのルート計算で、速度情報が無視されます。 このモードでは、ルートを適切に保ちながら、ルートの距離が最小化されます。 これには、たとえば、ターンのペナルティが含まれます。 そのため、結果として生じるルートは必ずしも最短距離のルートであるとは限りません。
  • Balanced - 走行時間と走行距離の組み合わせに基づいて最適化された、出発地点から目的地までのルート計算。

HERE SDK は、 2 つの経由地間の代替ルートをサポートします。 代替ルート機能を使用すると、ルートの計算後に複数のルートを戻すことができます。 RouteOptions このクラスを使用して、必要なルート数を設定できます。 HERE SDK は、この制限に従って異なるルートを返します。 返されたリストの最初の要素 RouteResult はメインルートであり、返されたルートの REST は特定の順序で一覧表示されません。

注 : オフライン モードでは、 3 つを超えるルートを設定しないでください。これらのルートの計算には、完了までにかなりの時間がかかるためです。
注 : 以前の作業クエリーよりも高いルート数を指定すると 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)に電話をかけたり、ルートカラーを設定したりできます。

図 1. プライマリ RenderType を使用しています
図 2. セカンダリ RenderType を使用しています
図 3. ユーザー定義のルートの色
注 :MapRoute.setRenderType(RenderType)MapRoute 、に追加された後にのみ呼び出す Mapことができます。
図 4. ルートを計算します

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

  1. CoreRouter インスタンスを宣言します。
    // Declare the variable (the CoreRouter)
    CoreRouter router = new CoreRouter();
    
  2. 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)));
    
  3. 新しいRouteOptionsオブジェクトを作成し、適切なRouteOptionsメソッドを呼び出してそのオブジェクトとTypeTransportMode値を設定してから、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);
    
  4. ルート計算で RouteMapRoute マップ上でレンダリングするインスタンスを作成するために使用できるオブジェクトを返すことができるようにするに 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
        }
      }
    }
  5. 内部リスナークラス ( 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.TrafficPenaltyModeenum) - DISABLEDAVOID_LONG_TERM_CLOSURESOPTIMALなどのルート計算で、CoreRouterがトラフィックイベントを処理する方法を記述する値を表します
  • RouteOptions.Type 列挙型 (enum) - FASTEST やなどのさまざまなルーティングタイプを記述する値を表します SHORTEST
  • RouteOptions.TransportMode列挙型 (enum) - CARTRUCK( TRACK 直線で経由地を接続する ) 、、、などのさまざまな転送モードを記述する値を表します PEDESTRIAN
  • RoutingError 列挙型 (enum) - NONE やなどのルート計算エラーを記述する値を表します VIOLATES_OPTIONS
  • RouteResult.ViolatedOption 列挙型 (enum) - AVOID_HIGHWAYS またはなどのルートオプション違反の可能性を示す値を表します AVOID_FERRIES