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

トラックをナビゲートする

ナビゲーションはNavigateライセンスでのみ利用できます。

HERE SDKは、さまざまな機能によってトラックのルーティングとガイダンスをサポートしています。たとえば、デリゲートを添付して、ナビゲーション中に狭いトンネルなど前方のトラック制約について通知を受け取ることができます。可能性のある制限の他の例としては、大型トラックが通過するのに十分な高さがない橋、トラックの重量が道路の許容重量を超えた道路などがあります。

次のコードスニペットを参照してください。

// Conform to the TruckRestrictionsWarningDelegate.
// Notifies truck drivers on road restrictions ahead. Called whenever there is a change.
func onTruckRestrictionsWarningUpdated(_ restrictions: [TruckRestrictionWarning]) {
    // The list is guaranteed to be non-empty.
    for truckRestrictionWarning in restrictions {
        if truckRestrictionWarning.distanceType == DistanceType.ahead {
            print("TruckRestrictionWarning ahead in \(truckRestrictionWarning.distanceInMeters) meters.")
            if let timeRule = truckRestrictionWarning.timeRule {
              if !timeRule.appliesTo(dateTime: Date()) {
                // For example, during a specific time period of a day, some truck restriction warnings do not apply.
                // If truckRestrictionWarning.timeRule is nil, the warning applies at anytime.
                print("Note that this truck restriction warning currently does not apply.")
              }
            }
        } else if truckRestrictionWarning.distanceType == DistanceType.reached {
            print("A restriction has been reached.")
        } else if truckRestrictionWarning.distanceType == DistanceType.passed {
            // If not preceded by a "reached"-notification, this restriction was valid only for the passed location.
            print("A restriction was just passed.")
        }

        // One of the following restrictions applies, if more restrictions apply at the same time,
        // they are part of another TruckRestrictionWarning element contained in the list.
        if truckRestrictionWarning.weightRestriction != nil {
            let type = truckRestrictionWarning.weightRestriction!.type
            let value = truckRestrictionWarning.weightRestriction!.valueInKilograms
            print("TruckRestriction for weight (kg): \(type): \(value)")
        } else if truckRestrictionWarning.dimensionRestriction != nil {
            // Can be either a length, width or height restriction of the truck. For example, a height
            // restriction can apply for a tunnel. Other possible restrictions are delivered in
            // separate TruckRestrictionWarning objects contained in the list, if any.
            let type = truckRestrictionWarning.dimensionRestriction!.type
            let value = truckRestrictionWarning.dimensionRestriction!.valueInCentimeters
            print("TruckRestriction for dimension: \(type): \(value)")
        } else {
            print("TruckRestriction: General restriction - no trucks allowed.")
        }
    }
}

DistanceType.reached はトラック制約のある場所に達すると通知します。規制のある場所を通過すると、このイベントの後に passed が送信されます。長さの規制がない場合は、reached はスキップされ、passed イベントのみが送信されます。ahead イベントは常に最初に送信されます。

各距離タイプの制限が通知されるのは1回のみです。更新された距離情報を継続してドライバーに通知する場合は、目的地までの頻繁な距離更新が含まれるRouteProgressをトラッキングすることで継続して通知できます。

すべての制限がnilの場合は、トラックに関する一般的な制約が適用されます。

規制の警告を地図上の MapFeatures.vehicleRestrictions レイヤーと比較したときに、一部の制限は道路の一方向に対してのみ有効な場合があります。

ルートを nil に設定する、または新しいルートを設定してガイダンスを停止すると、ahead 通知で通知された規制は即座に passed イベントになり、保留中の規制の警告はクリアされます。ルートを追随している間はルート上にない制限は除外されますが、ドライバーがルートから十分な距離 (15 m以上) を逸脱するとすぐに、その道路の前方にあるサポート対象の制限は再び制限警告に結びつきます。

トラック制約の通知しきい値は、他の警告と若干異なります。こちらに記載されたしきい値を確認してください。

TruckRestrictionWarningイベントは、前方の道路ネットワークのマップデータに基づいています。現在の設定されているTransportModeに関係なく、制限を配信します。

ルートを計算するときに、RoutingOptionsTransportMode.truckを含め、VehicleSpecificationを指定できます。これは、結果のRouteに影響します。ただし、TruckRestrictionWarningイベントには影響しません。前方のマップデータにあるほとんどの制限は転送されます。そのため、現在の車に関係のない制限警告を除外することがアプリケーションにとって合理的な場合があります。追随するルートがない場合は、トラッキングモードでもこのイベントによってイベントが配信されます。

トラックのルーティングの詳細については、ルート検索のセクションを参照してください。たとえば、トラック専用のルートを計算する方法を見つけることができます。一般に、ルートにTruckの交通機関タイプが含まれている場合は、トラックに最適化されています。

さらに、特定の市街エリアを除外するなど、いくつかの回避設定オプションを指定できます。これはすべて、ルートが計算されてNavigatorまたはVisualNavigatorに渡される前に指定できます。

以下のような機能もあります。

  • VehicleSpecificationおよびHazardousMaterialのリストが含まれたTransportMode.truckを指定したRoutingOptionsで、トラックの寸法や、トラックが危険物を運搬しているかどうかなどの車両制限を指定できます。この情報によって、トラックのルートを構想できます。前方にあるトラック制約について通知を受けるには、上に示されているTruckRestrictionWarningイベントをリッスンします。
  • 前述したように特定の RoadAttributes をリッスンできます。
  • 移動モードが truck に設定されている場合、SpeedLimit イベントは商用車規制 (CVR) の制限速度を示します。これは自動車よりも低速な場合があります。ルートを計算するときには、RoutingOptions 内の VehicleSpecification を指定することも検討します。トラッキングモードの場合は、navigator.trackingTransportProfile(vehicleProfile: vehicleProfile)を呼び出し、truck移動モードでVehicleProfileを設定します。トラッキングのデフォルトでは、car が想定されています。重量など、トラックに応じたその他の車両属性を必ず指定してください。
  • 特記する点として、grossWeightInKilogramsおよびweightInKilogramsはCVRの制限速度の他、ルート制限、予想到着時間に影響します。適切な VehicleSpecification を設定しないと、ルートや通知が不適切なものになる可能性があります。
  • AvoidanceOptionsを使用して排気ガス規制ゾーンを除外し、排気ガスの影響を受けやすい都心部の大気汚染を避けることができます。この方法では、トンネルなどの特定のRoadFeaturesも回避できます。これらは RoutingOptions で設定でき、ルート計算から除外されます。
  • セーフティ カメラ アイコンを地図に表示する、MapScene.Layers.safetyCameras マップ レイヤー スキームを有効にできます。注:このレイヤーは普通車にも適しています。
  • トラック固有の情報を地図上に表示するように最適化された、MapScene.Layers.vehicleRestrictions マップ レイヤー スキームを有効にできます。いくつかのMapFeatureModesが提供されています。たとえば、影響を受ける道路上でアクティブな制限と非アクティブな制限を強調表示するために紫色の線を使用します。灰色の線または灰色のアイコンは制限が非アクティブであることを示します。道路がその紫色の線と交差している場合、道路自体が紫色で示されていない場合は、この制限は現在の道路には適用されません。アイコンは必ずしも正確な場所を示すわけではありません。たとえば、制限のある道路の場合には、制限のある道路の中央にアイコンが配置されることがあります。また、制限が長く続く場合には、1つの道路または複数の道路上の同じ制限に対してアイコンが数回にわたり繰り返されることがあります。アイコン自体は国に応じてローカライズされており、制限のタイプが示されています。ほとんどの制限では、制限の場所とタイプもTruckRestrictionWarningイベントによって示されます (上の例を参照)。
  • PlaceDetailsにシャワーやトイレの情報が含まれたTruckAmenitiesを使用します。ルートの軌道に沿って検索し、場所にトラックのアメニティが含まれているかどうかを確認します。オンラインで使用する場合、TruckAmenitiesの取得にはname"show"に、value"truck"にしてsearchEngine.setCustomOption()を呼び出し、クローズドアルファ版の機能を有効にする必要があります。また、追加のライセンスも必要です。OfflineSearchEngineで使用する場合 (お使いのライセンスで利用可能であれば)、ライセンスは不要です。オンラインアクセス権を取得するには、当社までお問い合わせください。資格情報が有効になっていない場合、ライセンスが不足していることを示すSearchError.forbiddenエラーが表示されます。

EN 日本語

HERE documentation

Find answers to your product and technical questions

Documentation

What's new

Videos

EN 日本語

HERE ドキュメント

製品や技術に関する質問の答えを見つけましょう。より多くの内容と最新の情報については、英語版をご覧ください。

ドキュメント

ダイナミックマップ

動的コンテンツ関連のAPIをアプリやサービスに活用して、ドライバーが安全・快適かつ予定どおりに目的地へ到着できるよう支援します。

地図とデータ

世界中を走行する多数のマッピング車両から得られる最新の位置情報データを活用し、精度の高い地図やカスタムレイヤーを構築できます。

最新情報

動画

(function () { const input = document.querySelector('input[data-typeahead]'); if (!input) return; // Prevent the form from submitting/navigating input.closest('form')?.addEventListener('submit', e => e.preventDefault()); input.addEventListener('input', function () { const q = this.value.trim().toLowerCase(); document.querySelectorAll('.nav-group-name').forEach(group => { let anyVisible = false; group.querySelectorAll('.nav-group-task').forEach(task => { const text = task.textContent.trim().toLowerCase(); const show = !q || text.includes(q); task.style.display = show ? '' : 'none'; if (show) anyVisible = true; }); // Hide the whole group header if nothing matches group.style.display = anyVisible || !q ? '' : 'none'; }); }); })(); (function () { function onTokenClick(event) { var link = event.target.closest('.sdk-for-ios .item .token'); if (!link) return; event.preventDefault(); console.log('token clicked', link.textContent.trim()); var item = link.closest('.item'); if (!item) return; var content = item.querySelector('.height-container'); if (!content) { console.log('no .height-container found for item', item); return; } var isHidden = window.getComputedStyle(content).display === 'none'; content.style.display = isHidden ? 'block' : 'none'; link.classList.toggle('token-open', isHidden); var href = link.getAttribute('href'); if (href) { if (history.pushState) history.pushState({}, '', href); else location.hash = href; } } function openHashTarget() { var hash = window.location.hash.slice(1); if (!hash) return; var anchor = document.querySelector('.sdk-for-ios a[name="' + hash + '"]'); if (!anchor) return; var item = anchor.closest('.item'); if (!item) return; var link = item.querySelector('.token'); var content = item.querySelector('.height-container'); if (!link || !content) return; content.style.display = 'block'; link.classList.add('token-open'); } function init() { console.log('HERE SDK accordion init'); openHashTarget(); } document.removeEventListener('click', onTokenClick); document.addEventListener('click', onTokenClick); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } window.addEventListener('hashchange', openHashTarget); window.addEventListener('pageLoad', init); })();