ガイド変更履歴API references
ガイド

オフラインのルート検索機能

オフラインマップはNavigateライセンスでのみ使用できます。

オンラインのみのRoutingEngineに加えて、オフラインのユースケースに相当するOfflineRoutingEngineも利用可能です。このオフライン バージョンは、オンライン版と同じ強固なルート検索機能を提供するように作られており、インターネット接続がなくてもシームレスにナビゲーションを実行します。

ルートを計算できるのは、すでにキャッシュに保存された、またはプリロードされたオフライン マップ データのルートのみです。キャッシュに保存されたマップ データのみを使用する場合、ズーム レベルが低いと一部のタイルが読み込まれない場合があります。その場合、地図が表示されても、より低いズーム レベルが読み込まれるまでルートは見つかりません。オフライン マップではこのようなことは起こり得ず、ダウンロードした地域で必要なマップ データが利用できることが保証されます。したがって、キャッシュに保存されたマップ データに依存しないことをお勧めします。

OfflineRoutingEngineRoutingEngine と同じ簡単な方法で構築できます。

private RoutingInterface routingEngine;
private RoutingEngine onlineRoutingEngine;
private OfflineRoutingEngine offlineRoutingEngine;

...

try {
    onlineRoutingEngine = new RoutingEngine();
} catch (InstantiationErrorException e) {
    throw new RuntimeException("Initialization of RoutingEngine failed: " + e.error.name());
}

try {
    // Allows to calculate routes on already downloaded or cached map data.
    offlineRoutingEngine = new OfflineRoutingEngine();
} catch (InstantiationErrorException e) {
    throw new RuntimeException("Initialization of OfflineRoutingEngine failed: " + e.error.name());
}

運送ルート (TransitRoutingEngine経由) とEVルート (RoutingOptionsElectricVehicleOptions) はまだサポートされておらず、オンラインでのみ機能します。サポートされていない移動モードの場合、OfflineRouteEngineRoutingError.INVALID_PARAMETERで失敗します。

OfflineRoutingEngine には RoutingEngine と同じインターフェースがありますが、HERE バックエンド サービスへの新しいリクエストを開始するのではなく、すでにダウンロードまたはキャッシュに保存されたマップ データから結果が取得されるため、結果は若干異なる場合があります。

この方法では、たとえば、RoutingEngine の使用時に受信するデータと比較してデータが古い可能性があります。一方、このクラスではオンライン接続が必要ないため、より速く結果が得られます。

ただし、最終的なルートには空の運転操作のリストのみが含まれます。案内中に運転操作を取得する必要がある場合は、提供されているnextManeuverIndexを介してNavigatorまたはVisualNavigatorから直接取得できます。これは「ナビゲーション」セクションに示されています。

OfflineRoutingEngine で使用可能なすべてのインターフェースは RoutingEngine でも使用でき、両方のエンジンが同じインターフェースを採用します。これにより、以下に示すように、両方のエンジン インスタンス間の切り替えが簡単になります。

これらの機能について概要を簡単に確認するには、オフラインの RoutingExample クラスを参照してください。これには以下に示すすべてのコードスニペットが含まれており、GitHubにある「RoutingHybrid」のサンプルアプリの一部です。

以下に、OfflineRoutingEngineRoutingEngine を切り替える方法を示します。たとえば、外出中に接続が一時的に失われることがあります。このような場合には、OfflineRoutingEngine を使用して、すでにキャッシュまたはダウンロードされたマップ データに基づいてルートを計算することをお勧めします。

これを行うには、まずデバイスの接続が失われたかどうかを確認する必要があります。2番目のステップとして、自分の好きなエンジンを使用できます。

// Sets the OfflineRoutingEngine as main engine when the device is not connected, otherwise this will set the
// RoutingEngine that requires connectivity.
private void setRoutingEngine() {
    if (isDeviceConnected()) {
        routingEngine = onlineRoutingEngine;
    } else {
        routingEngine = offlineRoutingEngine;
    }
}

これで、上記の前のセクションで示したように、現在のroutingEngineインスタンスで同じコードを実行できるようになります。

OfflineRoutingEngineインスタンスが不要になった場合は、保留中の要求をキャンセルしてシャットダウンし、適切なリソースクリーンアップを行うdispose()メソッドを呼び出すことを推奨します。

デバイスがオフラインの場合、オンライン バリエーションではルートが検索されず、エラーが報告されます。逆に、デバイスがオンラインであっても、使用するエリアで利用できるキャッシュまたはプリロードされたマップ データがない場合は、オフライン バリエーションでは、同様にエラーが報告されます。

デバイスがオンラインかどうかを確認するための isDeviceConnected() のコードはここでは省略されています。これにはサード パーティ API を使用するか、実際の接続を試みることができます。これが失敗した場合は、OfflineRoutingEngine に切り替えるか、その逆を行うことができます。ユーザーに高速なエクスペリエンスを提供するために、最初にオフラインのルート検索を試すことができますが、マップ データが利用できない場合はオンラインで試すことができます。

「RoutingHybrid」のサンプル アプリは GitHub にあります。