Planejar um trajeto

Às vezes, é recomendável planejar o trajeto que o app vai oferecer aos usuários. O uso de um token de rota da API Routes (ou da API Routes Preferred) pode ajudar você a especificar duas coisas para a rota planejada:

  • Uma polilinha do trajeto

  • Objetivos da sua rota

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

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

  • 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 envio de serviço pode minimizar o tempo necessário para levar operadores a uma solicitação de job.

  • Reduzir os custos e aumentar a segurança: para uma empresa de compartilhamento de viagens, é possível 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 de rota, 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 o SDK do Navigation usar quando possível.

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

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

  • Especifique objetivos de rota mais avançados, como trajetos ecológicos 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 os objetivos dela. A API Routes retorna um token de trajeto que você pode transmitir ao SDK do Navigation para orientar como ele direciona o 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. Você transmite o token da rota para o SDK do Navigation.

  3. O SDK do Navigation recupera o trajeto ou, se ele não está disponível devido a mudanças nas condições, ele recupera 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 pode não ser seguido exatamente

Pense nos seus objetivos e trajeto planejado como diretrizes a serem seguidas: eles não são prescritivos. Pode haver diferenças 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 foram alterados desde a criação do trajeto planejado. Essa diferença pode resultar em incompatibilidade entre as metas planejadas e reais de distância e HEC, entre outras qualidades de viagem importantes.

Planejar uma rota usando um token de rota

Você pode planejar um trajeto 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
    • Definir routing_preference como TRAFFIC_AWARE ou TRAFFIC_AWARE_OPTIMAL
    • NÃO use waypoints Via

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

  1. Armazene o token de rota: no SDK do Navigation, configure uma string para armazenar o token da rota. 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 usados 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 um trajeto for encontrado do local do usuário até o destino especificado, ele 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 uma rota planejada.

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 do trajeto interagem:

  • Substitui destinos definidos anteriormente.

  • Usa o local de partida do veículo.

  • Ajusta-se às condições da via e do trânsito. Consulte Por que um trajeto planejado pode não ser seguido.

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Seguidores:

    • Opções relacionadas ao waypoint, como a preferência do lado da via.

    • Objetivos da rota. Se o SDK do Navigation precisar ajustar a rota retornada, ele usará os objetivos do trajeto que você especificou ao solicitar o token do trajeto. Por esse motivo, use as mesmas opções relacionadas ao waypoint que você especificou na API Routes.