Proporcionar navegación paso a paso para vehículos grandes

A quién está dirigida esta guía: Lee esta guía si eres un desarrollador para dispositivos móviles responsable de crear la experiencia de navegación en la cabina para conductores de camiones o de otros vehículos grandes.

Qué abarca esta guía: En esta guía, se explica cómo tomar una ruta específica para camiones, generada por la API de Routes o la API de Route Optimization, y usarla para potenciar una sesión de navegación paso a paso con el SDK de Navigation.

Qué aprenderás

Aprenderás a hacer lo siguiente:

  • Usar un routeToken para conectar la planificación de rutas de backend con la experiencia de navegación en la app
  • Configurar el SDK de Navigation para usar una ruta de camiones planificada previamente
  • Comprender cómo aparecen las restricciones específicas para camiones al conductor en la IU

Requisitos previos

Antes de comenzar, debes cumplir con los siguientes requisitos.

Configura el proyecto

Tu proyecto de Google Cloud debe aprovisionarse para el enrutamiento de vehículos grandes. Si usas proyectos separados para la API de Routes y el SDK de Navigation, ambos deben aprovisionarse en consecuencia.

Genera un token de ruta

Primero debes generar una ruta siguiendo las instrucciones de la Generate truck routes & ETAs guide. El resultado de ese proceso, un routeToken, es necesario para completar los pasos de esta guía.

Requisitos mínimos

Tu app debe usar la versión mínima requerida del SDK de Navigation:

  • Android: 5.2.0 o versiones posteriores
  • iOS: 5.4.0 o versiones posteriores

Además, se aplican todos los requisitos para usar el SDK de Navigation:

Limitaciones

Antes de comenzar, debes tener en cuenta las siguientes limitaciones y requisitos.

  • Disponibilidad geográfica: El enrutamiento de vehículos grandes solo está disponible en los 48 estados contiguos de Estados Unidos.
  • El enrutamiento de vehículos grandes es una oferta en etapa de versión preliminar. Los conductores no deben depender únicamente de las rutas que muestra esta API para que sean seguras o legales. No se garantiza que las rutas sean adecuadas para el vehículo, y seguirlas puede exponer a los conductores a peligros, como puentes bajos o rutas en las que se prohíben los vehículos grandes.
  • Rutas de mejor esfuerzo. En algunos casos, la API no puede encontrar una ruta que cumpla por completo con las restricciones de viaje. En cambio, muestra una ruta de "mejor esfuerzo" que aún puede atravesar áreas restringidas. La respuesta de la API de Routes marca claramente estas rutas en el campo routeRestrictionsPartiallyIgnored. En estos casos, planifica tu ruta con cuidado, idealmente con otros datos de origen. No uses una ruta marcada como una única fuente de información para la planificación o la navegación.
  • Funciones no compatibles: Si bien estamos trabajando para agregar más funciones a esta oferta, el enrutamiento de vehículos grandes no admite lo siguiente:
    • Precios de peaje para camiones
    • Límites de velocidad
    • Enrutamiento para materiales peligrosos radiactivos
  • Límites de uso: Todas las solicitudes están sujetas a los límites estándar de consultas por segundo (QPS).

Muestra la IU específica para camiones

El SDK de Navigation muestra automáticamente advertencias visuales, llamadas llamadas de ruta, en el mapa para advertir a los conductores sobre las próximas restricciones para camiones. Las llamadas se renderizan para las restricciones que forman parte de la ruta planificada, pero no en otras rutas cercanas.

El SDK incluye llamadas para las siguientes restricciones:

Restricción Ícono y texto de la llamada Condiciones para la visualización
Altura Un ícono amarillo de restricción de altura
Amarillo = advertencia, tu vehículo está cerca de la altura máxima permitida
Un ícono rojo de restricción de altura
Rojo = tu vehículo supera la altura máxima permitida
Aparece una llamada amarilla cuando la altura del vehículo está cerca de la restricción.
Un mapa con una advertencia de restricción de altura
Aparece una llamada roja si la ruta no cumple con los requisitos y viola una restricción de altura.
Un mapa con un incumplimiento de restricción de altura
Peso Ícono de restricción de peso Aparece una llamada roja cuando el peso del vehículo supera el límite de la ruta.
Mapa con un ícono de restricción de peso
Camiones prohibidos Ícono de camiones prohibidos Aparece una llamada roja cuando se viaja en un segmento de ruta con una restricción para camiones.
Un mapa con un ícono de camiones prohibidos
Bienes peligrosos Ícono de bienes peligrosos Aparece una llamada roja cuando se prohíbe la carga de materiales peligrosos del vehículo en un segmento de ruta.
Mapa con un ícono de bienes peligrosos

Flujo de trabajo del token de ruta

Un routeToken es una instantánea segura y encriptada de una ruta generada por la API de Routes. Contiene todos los detalles de la ruta, incluido el perfil del vehículo que se usó para crearla. El uso de un token garantiza que la sesión de navegación coincida con la ruta que planificaste en tu backend.

Ten en cuenta que, una vez que el conductor comienza a navegar, la ruta que presenta el SDK de Navigation puede cambiar según el tráfico y las condiciones de la ruta. En algunos casos, puede diferir de la ruta especificada por el token de ruta.

En estos casos, así como en el caso en que el conductor se desvíe de la ruta planificada, el uso del token de ruta garantiza que las rutas recién recalculadas respeten los atributos del vehículo según se configuraron en la solicitud original de la API de Routes.

El flujo de trabajo sigue estos pasos:

  1. Tu backend solicita una ruta de camiones a la API de Routes.
  2. La API de Routes muestra un routeToken.
  3. Tu backend envía este token a tu aplicación para dispositivos móviles.
  4. La app para dispositivos móviles pasa el routeToken al SDK de Navigation para iniciar el viaje.
  5. El SDK de Navigation controla todos los aspectos de la experiencia paso a paso, incluido el cambio de ruta si el conductor se desvía de la ruta, mientras se conservan las restricciones originales del vehículo.

Implementación: Inicia un viaje específico para camiones

Para iniciar una sesión de navegación con tu ruta de camiones, pasa el token de ruta al navegador.

Paso 1: Obtén el token de ruta

Tu aplicación recibe la cadena routeToken de tu servidor de backend.

El siguiente código es un token de ejemplo:

CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g

Paso 2: Pasa el token al navegador

Proporciona el routeToken al navegador cuando configures el destino del viaje. Luego, el SDK de Navigation usa este token para todos los cálculos de ruta del viaje.

Ten en cuenta que el SDK de Navigation tiene una configuración TravelMode, que debe establecerse en TravelMode.DRIVING. Esto es independiente de la configuración travelMode en la API de Routes, que debe establecerse en TRUCK. La configuración travelMode de la API de Routes está codificada en el routeToken y le indica al SDK de Navigation que muestre la experiencia y la ruta específicas para camiones.

Android

Usa CustomRoutesOptions.builder() para configurar el token y, luego, pásalo a 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

Pasa el token de ruta al SDK de Navigation con el método mapView.navigator setDestinations y especifica los mismos puntos de referencia de destino que usaste cuando creaste el token de ruta:

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

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

Próximos pasos