Calcula el resumen de enrutamiento

Para usar Text Search (nueva) o Nearby Search (nueva) para calcular la duración del viaje y la distancia a cada lugar de la respuesta, haz lo siguiente:

  1. Pasa el parámetro RoutingParameters en la solicitud mediante setOrigin() para especificar las coordenadas de latitud y longitud del origen de la ruta. Este parámetro es obligatorio para calcular la duración y la distancia a cada lugar en la respuesta.

  2. Cuando compiles el objeto de solicitud, agrega .setRoutingSummariesIncluded(true).

Cómo usar Text Search (nueva)

En la siguiente solicitud, calculas la duración del viaje y la distancia a cada lugar en la respuesta de Text Search (nuevo):

// 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();
    });

La clase SearchByTextResponse representa la respuesta de una solicitud de búsqueda. Puedes llamar a SearchByTextResponse.getRoutingSummaries() para mostrar la lista de resúmenes de enrutamiento. Un objeto SearchByTextResponse también contiene lo siguiente:

  • Es una lista de objetos Place que representan todos los lugares coincidentes, con un objeto Place por lugar coincidente.
  • Cada objeto Place solo contiene los campos definidos por la lista de campos que se pasa en la solicitud.

En este ejemplo, calculas la duración del viaje y la distancia a cada lugar en la respuesta de la Búsqueda cercana. En este ejemplo, se buscan restaurantes en Sídney, Australia, y se establece la restricción de ubicación y el origen de la ruta en las mismas coordenadas de latitud y longitud:

// 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();
    });

La clase SearchNearbyResponse representa la respuesta de una solicitud de búsqueda. Puedes llamar a SearchNearbyResponse.getRoutingSummaries() para mostrar la lista de resúmenes de enrutamiento. Un objeto SearchNearbyResponse también contiene lo siguiente:

  • Una lista de objetos Place que representan todos los lugares coincidentes, con un objeto Place por cada lugar coincidente.
  • Cada objeto Place solo contiene los campos definidos por la lista de campos que se pasó en la solicitud.

No es necesario que uses las mismas coordenadas para la restricción de ubicación y para el origen de enrutamiento. Por ejemplo, estableces la restricción de ubicaciones en el punto central de Sydney para restringir los resultados de la búsqueda a ese círculo. Sin embargo, luego estableces el origen del enrutamiento en las coordenadas de tu casa, es decir, en una ubicación diferente dentro del círculo de búsqueda. Luego, la solicitud restringe los resultados de la búsqueda al círculo y calcula los resúmenes de planificación de ruta en función de la ubicación de tu casa.

Especifica las opciones de viaje

De forma predeterminada, los cálculos de duración y distancia son para un automóvil. Sin embargo, puedes controlar el tipo de vehículo, así como otras opciones, en la búsqueda.

En el siguiente ejemplo, especificas el modo de viaje como DRIVE y evitar las autopistas:

// 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();
    });