Obliczanie podsumowania trasy
Aby obliczyć czas podróży i odległość do każdego miejsca w odpowiedzi za pomocą wyszukiwania tekstowego (nowego) lub wyszukiwania w pobliżu (nowego):
-
W żądaniu przekaż parametr
RoutingParameters, używającsetOrigin()do określenia współrzędnych geograficznych miejsca wylotu. Ten parametr jest wymagany do obliczenia czasu podróży i odległości do każdego miejsca w odpowiedzi. -
Podczas tworzenia obiektu żądania dodaj
.setRoutingSummariesIncluded(true).
Korzystanie z wyszukiwania tekstowego (nowego)
W tym żądaniu obliczasz czas podróży i odległość do każdego miejsca w odpowiedzi wyszukiwania tekstowego (nowego):
// 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 zwrócić listę podsumowań tras, możesz wywołać SearchByTextResponse.getRoutingSummaries().
Obiekt SearchByTextResponse zawiera też:
- listę obiektów
Place, które reprezentują wszystkie pasujące miejsca, przy czym każdy obiektPlaceodpowiada jednemu pasującemu miejscu; - każdy obiekt
Placezawiera tylko pola zdefiniowane przez listę pól przekazaną w żądaniu.
Korzystanie z wyszukiwania w pobliżu
W tym przykładzie obliczasz czas podróży i odległość do każdego miejsca w odpowiedzi wyszukiwania w pobliżu. Ten przykład wyszukuje restauracje w Sydney w Australii i ustawia ograniczenie lokalizacji oraz miejsce wylotu na te same współrzędne geograficzne:
// 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 zwrócić listę podsumowań tras, możesz wywołać SearchNearbyResponse.getRoutingSummaries().
Obiekt SearchNearbyResponse zawiera też:
- listę obiektów
Place, które reprezentują wszystkie pasujące miejsca, przy czym każdy obiektPlaceodpowiada jednemu pasującemu miejscu; - każdy obiekt
Placezawiera tylko pola zdefiniowane przez listę pól przekazaną w żądaniu.
Nie musisz używać tych samych współrzędnych w przypadku ograniczenia lokalizacji i miejsca wylotu. Możesz na przykład ustawić ograniczenie lokalizacji na środek Sydney, aby ograniczyć wyniki wyszukiwania do tego okręgu. Następnie możesz ustawić miejsce wylotu na współrzędne swojego domu, czyli na inną lokalizację w obrębie okręgu wyszukiwania. Żądanie ogranicza wtedy wyniki wyszukiwania do okręgu i oblicza podsumowania tras na podstawie lokalizacji Twojego domu.
Określanie opcji podróży
Domyślnie obliczenia czasu podróży i odległości dotyczą samochodu. Możesz jednak kontrolować typ pojazdu i inne opcje w wyszukiwaniu.
-
Użyj
routingParameters.setTravelMode(), aby ustawić środek transportu naDRIVE,BICYCLE,WALK, lubTWO_WHEELER. Więcej informacji o tych opcjach znajdziesz w artykule Dostępne typy pojazdów na trasach. -
Użyj
routingParameters.setRoutingPreference(), aby ustawić opcję preferencji trasy naTRAFFIC_UNAWARE(domyślnie),TRAFFIC_AWARElubTRAFFIC_AWARE_OPTIMAL. Każda opcja ma różne poziomy jakości danych i opóźnienia. Więcej informacji znajdziesz w artykule Określanie, jak i czy uwzględniać dane o natężeniu ruchu. -
Użyj
routingParameters.setRouteModifiers(), aby określićavoidTolls,avoidHighways,avoidFerries, iavoidIndoor. Więcej informacji o tych opcjach znajdziesz w artykule Określanie cech trasy, których należy unikać.
W następnym przykładzie określasz tryb podróży jako DRIVE i unikasz 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(); });