Hitung ringkasan pemilihan rute

Untuk menggunakan Text Search (Baru) atau Nearby Search (Baru) guna menghitung durasi perjalanan dan jarak ke setiap tempat dalam respons:

  1. Teruskan parameter RoutingParameters dalam permintaan, menggunakan setOrigin() untuk menentukan koordinat lintang dan bujur asal pemilihan rute. Parameter ini diperlukan untuk menghitung durasi dan jarak ke setiap tempat dalam respons.

  2. Saat mem-build objek permintaan, tambahkan .setRoutingSummariesIncluded(true).

Menggunakan Text Search (Baru)

Dalam permintaan berikut, Anda menghitung durasi perjalanan dan jarak ke setiap tempat dalam respons Text Search (New):

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

Class SearchByTextResponse mewakili respons dari permintaan penelusuran. Anda dapat memanggil SearchByTextResponse.getRoutingSummaries() untuk menampilkan daftar ringkasan perutean. Objek SearchByTextResponse juga berisi:

  • Daftar objek Place yang mewakili semua tempat yang cocok, dengan satu objek Place per tempat yang cocok.
  • Setiap objek Place hanya berisi kolom yang ditentukan oleh daftar kolom yang diteruskan dalam permintaan.

Dalam contoh ini, Anda menghitung durasi perjalanan dan jarak ke setiap tempat dalam respons Penelusuran Langsung. Contoh ini menelusuri restoran di Sydney, Australia, dan menetapkan batasan lokasi serta asal pemilihan rute ke koordinat lintang dan bujur yang sama:

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

Class SearchNearbyResponse mewakili respons dari permintaan penelusuran. Anda dapat memanggil SearchNearbyResponse.getRoutingSummaries() untuk menampilkan daftar ringkasan perutean. Objek SearchNearbyResponse juga berisi:

  • Daftar objek Place yang mewakili semua tempat yang cocok, dengan satu objek Place per tempat yang cocok.
  • Setiap objek Place hanya berisi kolom yang ditentukan oleh daftar kolom yang diteruskan dalam permintaan.

Anda tidak harus menggunakan koordinat yang sama untuk pembatasan lokasi dan untuk asal pemilihan rute. Misalnya, Anda menetapkan pembatasan lokasi ke titik tengah Sydney untuk membatasi hasil penelusuran ke lingkaran tersebut. Namun, Anda kemudian menetapkan asal pemilihan rute ke koordinat rumah Anda, yang berarti ke lokasi yang berbeda dalam lingkaran penelusuran. Permintaan tersebut kemudian membatasi hasil penelusuran ke lingkaran, dan menghitung ringkasan pemilihan rute berdasarkan lokasi rumah Anda.

Menentukan opsi perjalanan

Secara default, penghitungan durasi dan jarak dilakukan untuk mobil. Namun, Anda dapat mengontrol jenis kendaraan, serta opsi lainnya, dalam penelusuran.

  • Gunakan routingParameters.setTravelMode() untuk menetapkan mode transportasi ke DRIVE, BICYCLE, WALK, atau TWO_WHEELER. Untuk informasi selengkapnya tentang opsi ini, lihat Jenis kendaraan yang tersedia untuk rute.

  • Gunakan routingParameters.setRoutingPreference() untuk menetapkan opsi preferensi pemilihan rute ke TRAFFIC_UNAWARE (default), TRAFFIC_AWARE, atau TRAFFIC_AWARE_OPTIMAL. Setiap opsi memiliki tingkat kualitas dan latensi data yang bervariasi. Untuk mengetahui informasi selengkapnya, lihat Menentukan cara dan apakah akan menyertakan data traffic.
  • Gunakan routingParameters.setRouteModifiers() untuk menentukan ke avoidTolls, avoidHighways, avoidFerries, dan avoidIndoor. Untuk mengetahui informasi selengkapnya tentang opsi ini, lihat Menentukan fitur rute yang harus dihindari.

Pada contoh berikutnya, Anda menentukan mode perjalanan sebagai DRIVE dan untuk menghindari jalan bebas hambatan:

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