Calcolare il riepilogo del calcolo del percorso

Per utilizzare la ricerca di testo (novità) o la ricerca nelle vicinanze (novità) per calcolare la durata del viaggio e la distanza da ciascun luogo nella risposta:

  1. Passa il parametro RoutingParameters nella richiesta, utilizzando setOrigin() per specificare le coordinate di latitudine e longitudine dell'origine del calcolo itinerario. Questo parametro è necessario per calcolare la durata e la distanza di ogni luogo nella risposta.

  2. Quando crei l'oggetto della richiesta, aggiungi .setRoutingSummariesIncluded(true).

Utilizzare la ricerca di testo (novità)

Nella richiesta seguente, calcoli la durata del viaggio e la distanza da ogni luogo nella risposta di Ricerca di testo (nuova):

// 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 rappresenta la risposta a una richiesta di ricerca. Puoi chiamare SearchByTextResponse.getRoutingSummaries() per restituire l'elenco dei riepiloghi di routing. Un oggetto SearchByTextResponse contiene anche:

  • Un elenco di oggetti Place che rappresentano tutti i luoghi corrispondenti, con un oggetto Place per ogni luogo corrispondente.
  • Ogni oggetto Place contiene solo i campi definiti dall'elenco di campi passato nella richiesta.

In questo esempio, calcoli la durata del viaggio e la distanza da ogni luogo nella risposta della Ricerca nelle vicinanze. Questo esempio cerca ristoranti a Sydney, Australia e imposta la limitazione della località e l'origine del percorso sulle stesse coordinate di latitudine e longitudine:

// 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 rappresenta la risposta a una richiesta di ricerca. Puoi chiamare SearchNearbyResponse.getRoutingSummaries() per restituire l'elenco dei riepiloghi di routing. Un oggetto SearchNearbyResponse contiene anche:

  • Un elenco di oggetti Place che rappresentano tutti i luoghi corrispondenti, con un oggetto Place per ogni luogo corrispondente.
  • Ogni oggetto Place contiene solo i campi definiti dall'elenco di campi passato nella richiesta.

Non è necessario utilizzare le stesse coordinate per la limitazione di località e per l'origine del routing. Ad esempio, puoi impostare la limitazione delle località sul centro di Sydney per limitare i risultati di ricerca a quel cerchio. Tuttavia, imposti l'origine del percorso sulle coordinate della tua casa, ovvero su una località diversa all'interno del cerchio di ricerca. La richiesta limita quindi i risultati di ricerca al cerchio e calcola i riepiloghi dei percorsi in base alla posizione della tua casa.

Specificare le opzioni di viaggio

Per impostazione predefinita, i calcoli di durata e distanza si riferiscono a un'auto. Tuttavia, puoi controllare il tipo di veicolo, oltre ad altre opzioni, nella ricerca.

  • Usa routingParameters.setTravelMode() per impostare la modalità di trasporto su DRIVE, BICYCLE, WALK o TWO_WHEELER. Per ulteriori informazioni su queste opzioni, consulta la sezione Tipi di veicoli disponibili per le route.

  • Utilizza routingParameters.setRoutingPreference() per impostare l'opzione di preferenza di routing su TRAFFIC_UNAWARE (predefinito), TRAFFIC_AWARE o TRAFFIC_AWARE_OPTIMAL. Ogni opzione presenta livelli diversi di qualità e latenza dei dati. Per saperne di più, consulta Specificare come e se includere i dati sul traffico.
  • Utilizza routingParameters.setRouteModifiers() per specificare avoidTolls, avoidHighways, avoidFerries e avoidIndoor. Per ulteriori informazioni su queste opzioni, consulta la sezione Specificare elementi del percorso da evitare.

Nell'esempio seguente, specifichi la modalità di viaggio come DRIVE e di evitare le autostrade:

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