Planifica una ruta

A veces, es posible que desees planificar la ruta que tu app proporciona a los usuarios. Usar un token de ruta de la API de Routes, la API de Routes Preferred o la API de Route Optimization puede ayudarte a especificar dos aspectos de tu ruta planificada:

  • Una polilínea para la ruta

  • Tus objetivos de ruta

Por ejemplo, estos son algunos objetivos de rutas que puedes tener:

  • Minimizar el tiempo de entrega: Una empresa que entrega comida podría querer minimizar el tiempo que tarda en entregarla.

  • Minimizar el tiempo de viaje o el consumo de combustible: Una empresa de logística podría querer mejorar la eficiencia de sus conductores y reducir sus costos de combustible.

  • Minimizar el tiempo hasta el destino: Una operación de envío de servicios podría querer minimizar el tiempo que les toma a los operadores llegar a una solicitud de trabajo.

  • Reducir los costos y mejorar la seguridad: Una empresa de viajes compartidos podría querer encontrar una ruta que cueste menos para los pasajeros y evite ciertas áreas por motivos de seguridad.

Para obtener más información sobre cómo planificar una ruta con un token de ruta, consulta Solicita un token de ruta en la API de Routes y Polilíneas de transición y tokens de ruta en la API de Route Optimization.

Por qué usar un token de ruta para los objetivos de ruta

Con un token de ruta de la API de Routes, la API de Routes Preferred o la API de Route Optimization, tienes más control sobre la ruta proporcionada:

  • Planifica una ruta con anticipación para que el SDK de Navigation la use cuando sea posible.

  • Cómo elegir la mejor ruta para que la use el SDK de Navigation Si solicitas tokens de ruta cuando generas rutas en la API de Routes, obtendrás un token de ruta para cada ruta generada. Luego, puedes elegir el token de la ruta que quieras usar cuando se lo pases al SDK de Navigation.

  • Estima el precio por adelantado, incluidas las estimaciones de la hora de llegada estimada y la distancia. Si bien el costo y el tiempo reales pueden variar, esta estimación reduce la brecha entre el costo esperado y el real de la ruta.

  • Especifica objetivos de ruta más avanzados, como la ruta ecológica o la ruta más corta.

Cómo funcionan los tokens de ruta

Puedes usar la API de Routes, la API de Routes Preferred o la API de Route Optimization para planificar una ruta con objetivos de ruta. Puedes pasar un token de ruta que devuelva cualquiera de estas APIs al SDK de Navigation para guiar la forma en que se genera la ruta de tu vehículo.

Esto es lo que sucede cuando solicitas y usas un token de ruta:

  1. Las APIs de Routes, Routes Preferred o Route Optimization devuelven un token de ruta encriptado que incluye la polilínea y los objetivos de la ruta.

  2. Pasas el token de ruta al SDK de Navigation.

  3. El SDK de Navigation recupera la ruta o, si no está disponible debido a cambios en las condiciones, recupera la ruta que mejor coincide.

  4. Mientras conduces por la ruta, si el tráfico o las condiciones de la ruta cambian, o si un vehículo se desvía de la ruta planificada, las rutas modificadas intentan continuamente coincidir con la mejor ruta según los objetivos de la ruta en el token.

Este proceso maximiza la cercanía de la ruta real a la ruta planificada.

Por qué es posible que no se siga una ruta planificada exactamente

Piensa en la ruta planificada y los objetivos de la ruta como lineamientos a seguir, no como instrucciones. Es posible que veas una diferencia entre la ruta planificada y la que proporciona la navegación guiada debido a diferencias en las condiciones de la ruta, la ubicación de inicio o cualquier otro parámetro que haya cambiado desde que creaste la ruta planificada. Esta diferencia puede generar una discrepancia entre tus objetivos planificados y reales para la distancia y la ETA, entre otras cualidades importantes del viaje.

Planifica una ruta con un token de ruta

Para planificar una ruta, crea un token de ruta y, luego, pásalo al SDK de Navigation, como se describe en los siguientes pasos:

Paso 1: Crea un token de ruta con la API de Routes, la API de Routes Preferred o la API de Route Optimization

  1. Solicita un token de ruta con uno de los siguientes métodos:

    • API de Routes: computeRoutes. Para obtener más información sobre cómo solicitar un token de ruta en la API de Routes, consulta Cómo calcular una ruta y Cómo solicitar un token de ruta.

    • API de Routes Preferred: computeCustomRoutes. Para obtener más información sobre cómo solicitar un token de ruta en la API de Routes Preferred, consulta Planifica una ruta.

    • API de Route Optimization: optimizeTours o batchOptimizeTours. Para obtener más información sobre cómo solicitar un token de ruta en la API de Route Optimization, consulta Polilíneas de transición y tokens de ruta.

  2. Configura tu solicitud a la API de Routes o a la API de Routes Preferred para cumplir con los requisitos para usar un token de ruta:

    • Establece travel_mode en DRIVING o TWO_WHEELER
    • Establece routing_preference en TRAFFIC_AWARE o TRAFFIC_AWARE_OPTIMAL
    • NO uses puntos de referencia Via

Paso 2: Pasa el token de ruta al SDK de Navigation

  1. Almacena el token de ruta: En el SDK de Navigation, configura una cadena para almacenar el token de ruta. Por ejemplo:

    String routeToken = "route token returned by Routes API";

    Ejemplo de un token de ruta devuelto:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Pasa el token de ruta al SDK de Navigation con el método Navigator.setDestinations, especificando los mismos puntos de referencia de destino que usaste cuando creaste el token de ruta:

    setDestinations(List destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions);

    Por ejemplo:

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

El método Navigator.setDestinations devuelve el estado de la solicitud. Si encuentra una ruta desde la ubicación del vehículo hasta el destino indicado, devuelveRouteStatus.OK.

Para obtener más información sobre este método, consulta Navigator.setDestinations.

Ejemplo

En el siguiente ejemplo de código, se muestra cómo especificar una ruta planificada con un token de ruta.

    ArrayList <Waypoint> destinations = Lists.newArrayList();
    Waypoint waypoint1 =
       Waypoint.builder()
          .setLatLng(10, 20)
          .setTitle("title")
          .setVehicleStopover(true)
          .build();
    destinations.add(waypoint1);
    Waypoint waypoint2 =
       Waypoint.builder()
          .setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
          .setTitle("title")
          .setVehicleStopover(true)
           .build()
    destinations.add(waypoint2);

    String routeToken = "route token returned by Routes API";

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

    // Existing flow to get a Navigator.
    NavigationApi.getNavigator(...);

    // Existing flow for requesting routes.
    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions);

    // Or with display options.
    DisplayOptions displayOptions = new DisplayOptions();

    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions, displayOptions);

Cómo interactúan los tokens de ruta y el SDK de Navigation

Así es como interactúan la ruta generada por el SDK de Navigation y la ruta planificada en el token de ruta:

  • Anula cualquier destino establecido anteriormente.

  • Usa la ubicación inicial del vehículo.

  • Se ajusta a las condiciones de la ruta y el tráfico. Consulta Por qué es posible que no se siga una ruta planificada exactamente.

  • Ignora las siguientes opciones relacionadas con el enrutamiento como innecesarias:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Seguidores:

    • Opciones relacionadas con el punto de ruta, como la preferencia de lado de la ruta

    • Objetivos de ruta Si el SDK de Navigation debe ajustar la ruta devuelta, usa los objetivos de ruta que especificaste cuando solicitaste el token de ruta. Por este motivo, debes usar las mismas opciones relacionadas con los puntos de referencia que especificaste en la API de Routes.