Udostępnianie szczegółowej nawigacji dla pojazdów wielkogabarytowych

Dla kogo jest ten przewodnik: przeczytaj ten przewodnik, jeśli jesteś programistą aplikacji mobilnych, który odpowiada za tworzenie nawigacji w kabinie dla kierowców ciężarówek lub innych dużych pojazdów.

Zakres tego przewodnika: z tego przewodnika dowiesz się, jak korzystać z trasy dla ciężarówek wygenerowanej przez Routes API lub Route Optimization API i używać jej do obsługi sesji szczegółowej nawigacji za pomocą Navigation SDK.

Czego się nauczysz

Dowiesz się, jak:

  • Użyj routeToken, aby połączyć planowanie trasy na backendzie z nawigacją w aplikacji.
  • Skonfiguruj pakiet Navigation SDK, aby korzystał z wcześniej zaplanowanej trasy dla ciężarówki.
  • Dowiedz się, jak ograniczenia dotyczące ciężarówek są wyświetlane kierowcy w interfejsie.

Wymagania wstępne

Zanim zaczniesz, musisz spełnić te wymagania.

Konfigurowanie projektu

Twój projekt w chmurze Google Cloud musi być obsługiwany w przypadku routingu dużych pojazdów. Jeśli używasz osobnych projektów dla interfejsu Routes API i pakietu Navigation SDK, oba muszą być odpowiednio skonfigurowane.

Generowanie tokena trasy

Najpierw musisz wygenerować trasę, postępując zgodnie z instrukcjami w przewodniku po generowaniu tras dla ciężarówek i szacowaniu czasu przyjazdu. Wynik tego procesu, czyli routeToken, jest wymagany do wykonania czynności opisanych w tym przewodniku.

Wymagania minimalne

Aplikacja musi używać minimalnej wymaganej wersji pakietu Navigation SDK:

  • Android: 5.2.0 lub nowszy
  • iOS: 5.4.0 lub nowsza

Obowiązują też wszystkie wymagania dotyczące korzystania z pakietu Navigation SDK:

Ograniczenia

Zanim zaczniesz, zapoznaj się z tymi ograniczeniami i wymaganiami.

  • Dostępność geograficzna: wyznaczanie tras dla dużych pojazdów jest dostępne tylko w 48 stanach kontynentalnych Stanów Zjednoczonych.
  • Wyznaczanie tras dla dużych pojazdów jest dostępne w wersji podglądowej. Kierowcy nie mogą polegać wyłącznie na trasach zwracanych przez ten interfejs API, aby zapewnić bezpieczeństwo i zgodność z przepisami. Trasy nie są dostosowane do pojazdu, a podążanie nimi może narażać kierowców na niebezpieczeństwa, takie jak niskie mosty lub drogi, na których obowiązuje zakaz wjazdu dla dużych pojazdów.
  • Trasy o najwyższym priorytecie. W niektórych przypadkach interfejs API nie może znaleźć trasy, która w pełni spełnia wymagania dotyczące ograniczeń w podróżowaniu. Zamiast tego zwraca „najlepszą możliwą” trasę, która może przebiegać przez obszary z ograniczeniami. Odpowiedź interfejsu Routes API wyraźnie oznacza te trasy w polu routeRestrictionsPartiallyIgnored. W takich przypadkach starannie zaplanuj trasę, najlepiej korzystając z innych źródeł danych. Nie używaj oflagowanej trasy jako jedynego źródła informacji do planowania ani nawigacji.
  • Nieobsługiwane funkcje: pracujemy nad dodaniem do tego oferowanego rozwiązania większej liczby funkcji, ale obecnie wyznaczanie tras dla dużych pojazdów nie obsługuje tych funkcji:
    • Opłaty za przejazd dla ciężarówek
    • Ograniczenia prędkości
    • Wyznaczanie tras dla radioaktywnych materiałów niebezpiecznych
  • Limity wykorzystania: wszystkie żądania podlegają standardowym limitom zapytań na sekundę (QPS).

Wyświetlanie interfejsu dostosowanego do samochodów ciężarowych

Pakiet Navigation SDK automatycznie wyświetla na mapie wizualne ostrzeżenia, zwane wskazówkami dotyczącymi trasy, aby ostrzegać kierowców o nadchodzących ograniczeniach dla samochodów ciężarowych. Wywołania są wyświetlane w przypadku ograniczeń, które są częścią zaplanowanej trasy, ale nie na innych pobliskich drogach.

Pakiet SDK zawiera wywołania dotyczące tych ograniczeń:

Ograniczenie Ikona i tekst objaśnienia Warunki wyświetlania
Wysokość Żółta ikona ograniczenia wysokości
Żółty = ostrzeżenie, pojazd zbliża się do maksymalnej dopuszczalnej wysokości
Czerwona ikona ograniczenia wysokości
Czerwony = pojazd przekracza maksymalną dopuszczalną wysokość
Gdy wysokość pojazdu jest zbliżona do ograniczenia, pojawia się żółty dymek.
Mapa z ostrzeżeniem o ograniczeniu wysokości
Jeśli trasa jest niezgodna z przepisami i narusza ograniczenie wysokości, pojawi się czerwony wywołanie.
Mapa z naruszeniem ograniczenia wysokości
Waga Ikona ograniczenia wagi Gdy waga pojazdu przekracza limit drogi, pojawia się czerwony dymek.
Mapa z ikoną ograniczenia wagi
Zakaz ciężarówek Ikona zakazu wjazdu dla ciężarówek Podczas jazdy po odcinku drogi z ograniczeniami dla ciężarówek pojawi się czerwony dymek.
Mapa z ikoną zakazu wjazdu dla ciężarówek
Materiały niebezpieczne Ikona towarów niebezpiecznych Gdy przewóz materiałów niebezpiecznych jest zabroniony na danym odcinku drogi, pojawi się czerwony dymek.
Mapa z ikoną towarów niebezpiecznych

Przepływ pracy z tokenem trasy

routeToken to zaszyfrowany, bezpieczny zrzut trasy wygenerowanej przez interfejs Routes API. Zawiera wszystkie szczegóły trasy, w tym profil pojazdu użyty do jej utworzenia. Użycie tokena zapewnia, że sesja nawigacji jest zgodna z trasą zaplanowaną w backendzie.

Pamiętaj, że gdy kierowca rozpocznie nawigację, trasa prezentowana przez pakiet SDK nawigacji może się zmienić w zależności od warunków drogowych i ruchu. W niektórych przypadkach może się ona różnić od trasy określonej przez token trasy.

W takich przypadkach, a także w sytuacji, gdy kierowca zboczy z zaplanowanej trasy, użycie tokena trasy zapewnia, że nowo obliczone trasy będą uwzględniać atrybuty pojazdu skonfigurowane w pierwotnym żądaniu do interfejsu Routes API.

Proces przebiega w ten sposób:

  1. Backend wysyła żądanie trasy dla ciężarówki do interfejsu Routes API.
  2. Interfejs Routes API zwraca routeToken.
  3. Backend wysyła ten token do aplikacji mobilnej.
  4. Aplikacja mobilna przekazuje parametr routeToken do Navigation SDK, aby rozpocząć podróż.
  5. Pakiet Navigation SDK obsługuje wszystkie aspekty szczegółowej nawigacji, w tym zmianę trasy, jeśli kierowca zboczy z wyznaczonej drogi, przy jednoczesnym zachowaniu pierwotnych ograniczeń dotyczących pojazdu.

Implementacja: rozpoczęcie podróży dostosowanej do ciężarówki

Aby uruchomić sesję nawigacji z trasą dla ciężarówki, przekaż token trasy do Nawigatora.

Krok 1. Uzyskaj token trasy

Aplikacja otrzymuje ciąg routeToken z serwera backendu.

Poniższy kod to przykładowy token:

CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g

Krok 2. Przekaż token do Navigatora

Podaj routeToken do nawigatora, gdy ustawiasz miejsce docelowe podróży. Pakiet SDK Navigation używa tego tokena do wszystkich obliczeń trasy podczas przejazdu.

Pamiętaj, że pakiet Navigation SDK ma TravelMode konfigurację, która musi być ustawiona na TravelMode.DRIVING. Jest to niezależne od konfiguracji travelMode w interfejsie Routes API, która musi być ustawiona na TRUCK. Konfiguracja interfejsu Routes API travelMode jest zakodowana w parametrze routeToken i sygnalizuje pakietowi Navigation SDK, aby wyświetlał środowisko i trasę dostosowane do ciężarówki.

Android

Użyj CustomRoutesOptions.builder(), aby ustawić token, a następnie przekaż go do navigator.setDestinations().

// Obtain the routeToken string from your backend
val routeToken = "route token returned by Routes API"

val customRoutesOptions = CustomRoutesOptions.builder()
    .setRouteToken(routeToken)
    .setTravelMode(TravelMode.DRIVING)
    .build()

// Specify the same destination used to create the route token
ArrayList <Waypoint> destinations = Lists.newArrayList();
val destination = Waypoint.builder()
    .setLatLng(10.0, 20.0)
    .setTitle("title")
    .setVehicleStopover(true)
    .build()
destinations.add(destination);

navigator.setDestinations(destinations, customRoutesOptions)

iOS

Przekaż token trasy do pakietu Navigation SDK za pomocą metody mapView.navigator setDestinations, podając te same punkty pośrednie, których użyto podczas tworzenia tokena trasy:

// Obtain the routeToken string from your backend
let routeToken = "route token returned by Routes API"

mapView.navigator?.setDestinations([destination], routeToken: routeToken, callback: {...})

Następne kroki