Calcula el resumen de la ruta

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

  1. Pasa el parámetro RoutingParameters en la solicitud, usando 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 de la respuesta.

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

En la siguiente solicitud, calcularás la duración y la distancia del viaje 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 devolver la lista de resúmenes de rutas. 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 pasó en la solicitud.

En este ejemplo, calcularás la duración y la distancia del viaje a cada lugar en la respuesta de la Búsqueda cercana. En este ejemplo, se buscan restaurantes en Sídney, Australia, y se establecen 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 devolver la lista de resúmenes de rutas. Un objeto SearchNearbyResponse 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 pasó en la solicitud.

No es necesario que uses las mismas coordenadas para la restricción de ubicación y el origen del enrutamiento. Por ejemplo, puedes establecer la restricción de ubicaciones en el punto central de Sídney 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 la 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, especificarás el modo de viaje como DRIVE y evitarás 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();
    });