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:
-
Pasa el parámetro
RoutingParameters
en la solicitud, usandosetOrigin()
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. -
Cuando compiles el objeto de solicitud, agrega
.setRoutingSummariesIncluded(true)
.
Cómo usar Text Search (nueva)
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 objetoPlace
por lugar coincidente. - Cada objeto
Place
solo contiene los campos definidos por la lista de campos que se pasó en la solicitud.
Cómo usar la Búsqueda cercana
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 objetoPlace
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.
-
Usa
routingParameters.setTravelMode()
para establecer el medio de transporte enDRIVE
,BICYCLE
,WALK
oTWO_WHEELER
. Para obtener más información sobre estas opciones, consulta Tipos de vehículos disponibles para las rutas. -
Usa
routingParameters.setRoutingPreference()
para establecer la opción de preferencia de ruta comoTRAFFIC_UNAWARE
(predeterminada),TRAFFIC_AWARE
oTRAFFIC_AWARE_OPTIMAL
. Cada opción tiene diferentes niveles de calidad y latencia de los datos. Para obtener más información, consulta Cómo especificar si se deben incluir datos de tráfico y de qué manera. -
Usa
routingParameters.setRouteModifiers()
para especificaravoidTolls
,avoidHighways
,avoidFerries
yavoidIndoor
. Para obtener más información sobre estas opciones, consulta Cómo especificar las características de la ruta que se deben evitar.
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(); });