Calcular o resumo do roteamento

Para usar o Text Search (novo) ou o Nearby Search (novo) para calcular a duração e a distância da viagem até cada lugar na resposta:

  1. Transmita o parâmetro RoutingParameters na solicitação usando setOrigin() para especificar as coordenadas de latitude e longitude da origem de roteamento. Esse parâmetro é necessário para calcular a duração e a distância de cada lugar na resposta.

  2. Ao criar o objeto de solicitação, adicione .setRoutingSummariesIncluded(true).

Usar o Text Search (novo)

Na solicitação a seguir, você calcula a duração e a distância da viagem até cada lugar na resposta da pesquisa de texto (nova):

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Define the routing parameters object and pass the routing origin.
RoutingParameters routingParameters = RoutingParameters.builder()
    .setOrigin(toLatLng("-33.8688, 151.1957362"))
    .build();

// Use the builder to create a SearchByTextRequest object and pass the routing parameters.
// Set setRoutingSummariesIncluded to true.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food in Sydney, Australia", placeFields)
    .setMaxResultCount(10)
    .setRoutingParameters(routingParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned Lists of Place objects, RoutingSummary objects, and Leg objects.
placesClient.searchByText(searchByTextRequest)   
    .addOnSuccessListener(response -> {
      List<Place> places = response.getPlaces();
      List<RoutingSummary> routingSummaries = response.getRoutingSummaries();
      List<Leg> legs = routingSummaries.get(0).getLegs();
      Duration duration = legs.get(0).getDuration();
    });

A classe SearchByTextResponse representa a resposta de uma solicitação de pesquisa. Chame SearchByTextResponse.getRoutingSummaries() para retornar a lista de resumos de roteamento. Um objeto SearchByTextResponse também contém:

  • Uma lista de objetos Place que representam todos os lugares correspondentes, com um objeto Place por lugar correspondente.
  • Cada objeto Place contém apenas os campos definidos pela lista de campos transmitida na solicitação.

Neste exemplo, você calcula a duração e a distância da viagem até cada lugar na resposta da Pesquisa nas proximidades. Este exemplo pesquisa restaurantes em Sydney, Austrália, e define a restrição de local e a origem do roteamento para a mesma coordenada de latitude e longitude:

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Define the search area as a 500 meter diameter circle in Sydney, Australia.
LatLng center = new LatLng(-33.8688, 151.1957362);
CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 500);

// Define the routing parameters object and pass the routing origin.
RoutingParameters routingParameters = RoutingParameters.builder()
    .setOrigin(toLatLng("-33.8688, 151.1957362"))
    .build();

// Use the builder to create a SearchNearbyRequest object and pass the routing parameters.
// Set setRoutingSummariesIncluded to true.
final SearchNearbyRequest searchNearbyRequest =
SearchNearbyRequest.builder(/* location restriction = */ circle, placeFields)
    .setIncludedTypes(includedTypes)
    .setMaxResultCount(10)
    .setRoutingParameters(routingParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchNearby() to perform the search.
// Define a response handler to process the returned Lists of Place objects, RoutingSummary objects, and Leg objects.
placesClient.searchNearby(searchNearbyRequest)
    .addOnSuccessListener(response -> {
      List<Place> places = response.getPlaces();
      List<RoutingSummary> routingSummaries = response.getRoutingSummaries();
      List<Leg> legs = routingSummaries.get(0).getLegs();
      Duration duration = legs.get(0).getDuration();
    });

A classe SearchNearbyResponse representa a resposta de uma solicitação de pesquisa. Chame SearchNearbyResponse.getRoutingSummaries() para retornar a lista de resumos de roteamento. Um objeto SearchNearbyResponse também contém:

  • Uma lista de objetos Place que representam todos os lugares correspondentes, com um objeto Place por lugar correspondente.
  • Cada objeto Place contém apenas os campos definidos pela lista de campos transmitida na solicitação.

Não é necessário usar as mesmas coordenadas para a restrição de local e a origem do roteamento. Por exemplo, você define a restrição de locais como o ponto central de Sydney para restringir os resultados da pesquisa a esse círculo. Mas você definiu a origem do roteamento como as coordenadas da sua casa, ou seja, um local diferente dentro do círculo de pesquisa. A solicitação restringe os resultados da pesquisa ao círculo e calcula os resumos de roteamento com base na localização da sua casa.

Especificar opções de viagem

Por padrão, os cálculos de duração e distância são para um carro. No entanto, você pode controlar o tipo de veículo, bem como outras opções, na pesquisa.

  • Use routingParameters.setTravelMode() para definir o modo de transporte como DRIVE, BICYCLE, WALK ou TWO_WHEELER. Para mais informações sobre essas opções, consulte Tipos de veículos disponíveis para trajetos.

  • Use routingParameters.setRoutingPreference() para definir a opção de preferência de roteamento como TRAFFIC_UNAWARE (padrão), TRAFFIC_AWARE ou TRAFFIC_AWARE_OPTIMAL. Cada opção tem níveis variáveis de qualidade e latência dos dados. Para mais informações, consulte Especificar como e se incluir dados de tráfego.
  • Use routingParameters.setRouteModifiers() para especificar avoidTolls, avoidHighways, avoidFerries e avoidIndoor. Para mais informações sobre essas opções, consulte Especificar recursos de rota a serem evitados.

No próximo exemplo, você especifica o modo de viagem como DRIVE e evita rodovias:

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Define the routing modifiers object.
RouteModifiers routeModifiers = RouteModifiers.builder()
    .setAvoidHighways(true)
    .build();

// Define the routing parameters object and pass the routing origin.
RoutingParameters routingParameters = RoutingParameters.builder()
    .setOrigin(toLatLng("-33.8688, 151.1957362"))
    .setTravelMode(DRIVE)
    .setRouteModifiers(routeModifiers)
    .build();

// Use the builder to create a SearchByTextRequest object and pass the routing parameters.
// Set setRoutingSummariesIncluded to true.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food in Sydney, Australia", placeFields)
    .setMaxResultCount(10)
    .setRoutingParameters(routingParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned Lists of Place objects, RoutingSummary objects, and Leg objects.
placesClient.searchByText(searchByTextRequest)   
    .addOnSuccessListener(response -> {
      List<Place> places = response.getPlaces();
      List<RoutingSummary> routingSummaries = result.getRoutingSummaries();
      List<Leg> legs = routingSummaries.get(0).getLegs();
      Duration duration = legs.get(0).getDuration();
    });