Calculer le résumé de l'itinéraire

Pour utiliser Text Search (nouvelle version) ou Nearby Search (nouvelle version) afin de calculer la durée et la distance du trajet jusqu'à chaque lieu de la réponse :

  1. Transmettez le paramètre RoutingParameters dans la requête, en utilisant setOrigin() pour spécifier les coordonnées de latitude et de longitude du point de départ de l'itinéraire. Ce paramètre est obligatoire pour calculer la durée et la distance jusqu'à chaque lieu de la réponse.

  2. Lorsque vous créez l'objet de requête, ajoutez .setRoutingSummariesIncluded(true).

Dans la requête suivante, vous calculez la durée et la distance du trajet jusqu'à chaque lieu de la réponse Text Search (nouvelle version) :

// 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 classe SearchByTextResponse représente la réponse d'une requête de recherche. Vous pouvez appeler SearchByTextResponse.getRoutingSummaries() pour renvoyer la liste des résumés d'itinéraire. Un objet SearchByTextResponse contient également les éléments suivants :

  • Une liste d'objets Place qui représentent tous les lieux correspondants, avec un objet Place par lieu correspondant.
  • Chaque objet Place ne contient que les champs définis par la liste de champs transmise dans la requête.

Dans cet exemple, vous calculez la durée et la distance du trajet jusqu'à chaque lieu de la réponse Nearby Search. Cet exemple recherche des restaurants à Sydney, en Australie, et définit la restriction de lieu et le point de départ de l'itinéraire sur les mêmes coordonnées de latitude et de 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();
    });

La classe SearchNearbyResponse représente la réponse d'une requête de recherche. Vous pouvez appeler SearchNearbyResponse.getRoutingSummaries() pour renvoyer la liste des résumés d'itinéraire. Un objet SearchNearbyResponse contient également les éléments suivants :

  • Une liste d'objets Place qui représentent tous les lieux correspondants, avec un objet Place par lieu correspondant.
  • Chaque Place objet ne contient que les champs définis par la liste de champs transmise dans la requête.

Vous n'êtes pas obligé d'utiliser les mêmes coordonnées pour la restriction de lieu et le point de départ de l'itinéraire. Par exemple, vous définissez la restriction de lieu sur le point central de Sydney pour limiter les résultats de recherche à ce cercle. Vous définissez ensuite le point de départ de l'itinéraire sur les coordonnées de votre domicile, c'est-à-dire sur un autre lieu dans le cercle de recherche. La requête limite alors les résultats de recherche au cercle et calcule les résumés d'itinéraire en fonction de l'emplacement de votre domicile.

Spécifier les options de voyage

Par défaut, les calculs de durée et de distance concernent une voiture. Toutefois, vous pouvez contrôler le type de véhicule, ainsi que d'autres options, dans la recherche.

Dans l'exemple suivant, vous spécifiez le mode de transport DRIVE et évitez les autoroutes :

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