Oblicz podsumowanie tras

Aby użyć wyszukiwania tekstowego (nowej funkcji) lub wyszukiwania w pobliżu (nowej funkcji) do obliczenia czasu podróży i odległości do każdego miejsca w odpowiedzi:

  1. Przekaż parametr RoutingParameters w żądaniu, używając parametru setOrigin() do określenia współrzędnych geograficznych punktu początkowego docelowego. Ten parametr jest wymagany do obliczenia czasu trwania i odległości do każdego miejsca w odpowiedzi.

  2. Podczas tworzenia obiektu żądania dodaj .setRoutingSummariesIncluded(true).

Korzystanie z wyszukiwania tekstowego (nowa funkcja)

W następującej prośbie obliczasz czas i odległość do każdego miejsca w odpowiedzi na wyszukiwanie tekstowe (nowe):

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

Klasa SearchByTextResponse reprezentuje odpowiedź na żądanie wyszukiwania. Aby uzyskać listę podsumowań routingu, możesz wywołać funkcję SearchByTextResponse.getRoutingSummaries(). Obiekt SearchByTextResponse zawiera też:

  • Lista obiektów Place, które reprezentują wszystkie pasujące miejsca, z jednym obiektem Place na każde pasujące miejsce.
  • Każdy obiekt Place zawiera tylko pola zdefiniowane przez listę pól przekazaną w żądaniu.

W tym przykładzie obliczasz czas podróży i odległość do każdego miejsca w odpowiedzi na wyszukiwanie w pobliżu. W tym przykładzie wyszukiwane są restauracje w Sydney w Australii. Ograniczenie lokalizacji i miejsce docelowe mają te same współrzędne:

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

Klasa SearchNearbyResponse reprezentuje odpowiedź na żądanie wyszukiwania. Aby uzyskać listę podsumowań routingu, możesz wywołać funkcję SearchNearbyResponse.getRoutingSummaries(). Obiekt SearchNearbyResponse zawiera też:

  • Lista obiektów Place, które reprezentują wszystkie pasujące miejsca, z jednym obiektem Place na każde pasujące miejsce.
  • Każdy obiekt Place zawiera tylko pola zdefiniowane przez listę pól przekazaną w żądaniu.

Nie musisz używać tych samych współrzędnych w przypadku ograniczenia lokalizacji i początku trasy. Możesz na przykład ustawić ograniczenie lokalizacji na punkt środkowy Sydney, aby ograniczyć wyniki wyszukiwania do tego kręgu. Następnie ustawiasz punkt początkowy nawigacji na współrzędne swojego domu, czyli na inną lokalizację w okolicach koła wyszukiwania. Wtedy prośba ogranicza wyniki wyszukiwania do kręgu i oblicza podsumowania tras na podstawie lokalizacji Twojego domu.

Określ opcje podróży

Domyślnie obliczenia czasu trwania i odległości dotyczą samochodu. Możesz jednak kontrolować typ pojazdu oraz inne opcje w wyszukiwarce.

  • Użyj właściwości routingParameters.setTravelMode(), aby ustawić tryb transportu na DRIVE, BICYCLE, WALK lub TWO_WHEELER. Więcej informacji o tych opcjach znajdziesz w artykule Dostępne typy pojazdów na trasach.

  • Użyj opcji routingParameters.setRoutingPreference(), aby ustawić opcję preferencji trasowania na TRAFFIC_UNAWARE (domyślnie), TRAFFIC_AWARE lub TRAFFIC_AWARE_OPTIMAL. Każda opcja ma różny poziom jakości danych i opóźnienia. Więcej informacji znajdziesz w artykule Określanie sposobu i czasu uwzględniania danych o ruchu.
  • Użyj wartości routingParameters.setRouteModifiers(), aby określić, czy mają to być wartości avoidTolls, avoidHighways, avoidFerries lub avoidIndoor. Więcej informacji o tych opcjach znajdziesz w artykule Określanie elementów trasy, których należy unikać.

W następnym przykładzie określasz środek transportu jako DRIVE i ustawiasz opcję omijania autostrad:

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