Planejar um trajeto

Às vezes, pode ser útil planejar o trajeto que seu app oferece aos motoristas. Usar um token de rota da API Routes (ou API Routes Preferred) pode ajudar a especificar dois itens para sua rota planejada:

  • Uma polilinha do trajeto

  • Seus objetivos de trajeto

Por exemplo, aqui estão alguns exemplos de objetivos de roteamento que você pode ter:

  • Minimizar o tempo de entrega: uma empresa que entrega a comida pode querer minimizar o tempo necessário para isso.

  • Minimizar o tempo de viagem ou o consumo de combustível: uma empresa de logística pode querer melhorar a eficiência dos motoristas e reduzir os custos de combustível.

  • Minimizar o tempo até o destino: uma operação de expedição de serviços pode querer minimizar o tempo necessário para levar os operadores a uma solicitação de job.

  • Reduzir custos e aumentar a segurança: uma empresa de transporte por aplicativo pode querer encontrar um trajeto que custe menos para os passageiros e evite determinadas áreas por motivos de segurança.

Para mais informações sobre como planejar uma rota usando um token, consulte Solicitar um token de rota.

Por que usar um token de rota para objetivos de rota

Com um token de rota da API Routes ou Routes Preferred, você tem mais controle sobre a rota fornecida:

  • Planeje um trajeto com antecedência para que o SDK do Navigation use quando possível.

  • Escolha o melhor trajeto para o SDK do Navigation usar. Se você solicitar tokens de rota ao gerar rotas na API Routes, receberá um token para cada rota gerada. Em seguida, escolha o token para a rota que você quer usar ao transmiti-lo para o SDK do Navigation.

  • Estime o preço com antecedência, incluindo estimativas de HEC e distância. Embora o custo e o tempo reais possam variar, essa estimativa reduz a diferença entre o custo do trajeto esperado e o real.

  • Especifique objetivos de rota mais avançados, como o roteamento ecológico ou a rota mais curta.

Como funcionam os tokens de rota da API Routes

Use a API Routes ou Routes Preferred para planejar uma rota usando objetivos de rota. A API Routes retorna um token de rota que você pode transmitir ao SDK de navegação para orientar o trajeto do veículo.

Veja o que acontece quando você solicita e usa um token de rota da API Routes:

  1. A API Routes retorna um token de rota criptografado que inclui a polilinha e os objetivos da rota.

  2. Transmita o token de rota para o SDK do Navigation.

  3. O SDK do Navigation recupera a rota ou, se ela não estiver disponível devido a mudanças nas condições, ele recuperará a melhor rota correspondente.

  4. Durante o trajeto, se o trânsito ou outras condições da via mudarem ou se um veículo se desviar do trajeto planejado, as rotas modificadas continuarão tentando corresponder à melhor rota com base nos objetivos do trajeto no token.

Esse processo maximiza a distância entre o trajeto real e o planejado.

Por que um trajeto planejado não é seguido exatamente

Pense no trajeto e nos objetivos do trajeto planejados como diretrizes a serem seguidas: eles não são prescritivos. Você pode notar uma diferença entre o trajeto planejado e o fornecido pela navegação guiada devido a diferenças nas condições da via, no local de partida ou em outros parâmetros que mudaram desde que você criou o trajeto planejado. Essa diferença pode resultar em uma incompatibilidade entre as metas planejadas e reais de distância e HEC, entre outras qualidades importantes da viagem.

Planejar uma rota usando um token

Você pode planejar uma rota criando um token de rota e transmitindo-o para o SDK do Navigation, conforme descrito nas etapas a seguir:

Etapa 1: criar um token de rota usando a API Routes ou Routes Preferred

  1. Solicite um token de rota com um dos seguintes métodos:

    • API Routes: computeRoutes. Para mais informações sobre como solicitar um token de rota na API Routes, consulte Calcular uma rota e Solicitar um token de rota.

    • API Routes Preferred: computeCustomRoutes. Para mais informações sobre como solicitar um token de rota na API Routes Preferred, consulte Planejar uma rota.

  2. Configure sua solicitação de rota para atender aos requisitos de uso de um token de rota:

    • Defina travel_mode como DRIVING
    • Defina routing_preference como TRAFFIC_AWARE ou TRAFFIC_AWARE_OPTIMAL
    • NÃO usar waypoints do Via

Etapa 2: transmitir o token de rota para o SDK do Navigation

  1. Armazene o token de rota: no SDK do Navigation, configure uma string para armazenar o token. Exemplo:

    let routeToken = "route token returned by Routes API"

    Exemplo de um token de rota retornado:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Transmita o token de rota para o SDK do Navigation usando o método mapView.navigator setDestinations, especificando os mesmos waypoints de destino que você usou ao criar o token de rota:

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

O método Navigator.setDestinations retorna o status da solicitação. Se for encontrado um trajeto do local do usuário até o destino especificado, ele vai retornar RouteStatus.OK.

Para mais informações sobre esse método, consulte Navigator.setDestinations.

Exemplo

Os exemplos de código a seguir demonstram como recuperar um trajeto planejado.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

Como os tokens de rota e o SDK do Navigation interagem

Confira como a rota gerada pelo SDK do Navigation e a rota planejada no token interagem:

  • Substitui todos os destinos definidos anteriormente.

  • Usa o local de partida do veículo.

  • Ajusta as condições da via e do trânsito. Confira Por que um trajeto planejado pode não ser seguido exatamente.

  • Ignora as seguintes opções relacionadas ao roteamento como desnecessárias:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Segue:

    • Opções relacionadas ao ponto de referência, como a preferência pelo lado da via.

    • Objetivos da rota. Se o SDK do Navigation precisar ajustar a rota retornada, ele vai usar os objetivos de rota especificados ao solicitar o token de rota. Por esse motivo, use as mesmas opções relacionadas a waypoints especificadas na API Routes.