ルーティングの概要を計算する

テキスト検索(新版)または Nearby Search(新版)を使用して、レスポンスの各場所までの所要時間と距離を計算するには:

  1. リクエストで RoutingParameters パラメータを渡し、setOrigin() を使用してルーティングの起点の緯度と経度の座標を指定します。このパラメータは、レスポンス内の各場所までの所要時間と距離を計算するために必要です。

  2. リクエスト オブジェクトを作成するときに、.setRoutingSummariesIncluded(true) を追加します。

テキスト検索(新版)を使用する

次のリクエストでは、テキスト検索(新版)レスポンスで各場所までの所要時間と距離を計算します。

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

SearchByTextResponse クラスは、検索リクエストからのレスポンスを表します。SearchByTextResponse.getRoutingSummaries() を呼び出すと、ルーティングの概要のリストが返されます。SearchByTextResponse オブジェクトには次の要素も含まれます。

  • 一致するすべての場所を表す Place オブジェクトのリスト(一致する場所ごとに 1 つの Place オブジェクト)。
  • Place オブジェクトには、リクエストで渡されたフィールドリストで定義されたフィールドのみが含まれます。

この例では、周辺検索レスポンスの各プレイスまでの移動時間と距離を計算します。この例では、オーストラリアのシドニーにあるレストランを検索し、位置情報の制限とルーティングの出発地を同じ緯度と経度の座標に設定します。

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

SearchNearbyResponse クラスは、検索リクエストからのレスポンスを表します。SearchNearbyResponse.getRoutingSummaries() を呼び出すと、ルーティングの概要のリストが返されます。SearchNearbyResponse オブジェクトには次の要素も含まれます。

  • 一致するすべての場所を表す Place オブジェクトのリスト。一致する場所ごとに 1 つの Place オブジェクトが含まれます。
  • Place オブジェクトには、リクエストで渡されたフィールドリストで定義されたフィールドのみが含まれます。

位置情報の制限とルーティング元に同じ座標を使用する必要はありません。たとえば、地域の制限をシドニーの中心地に設定すると、検索結果がその円に制限されます。その後、ルートの始点を自宅の座標に設定しました。つまり、検索範囲内の別の場所に設定したのです。リクエストは、検索結果を円内に制限し、家の位置に基づいてルーティングの概要を計算します。

移動オプションを指定する

デフォルトでは、所要時間と距離の計算は自動車用です。ただし、検索で車両タイプやその他のオプションを制御できます。

  • routingParameters.setTravelMode() を使用して、転送モードを DRIVEBICYCLEWALKTWO_WHEELER に設定します。これらのオプションの詳細については、ルートで使用可能な車両タイプをご覧ください。

  • routingParameters.setRoutingPreference() を使用して、ルーティング設定オプションを TRAFFIC_UNAWARE(デフォルト)、TRAFFIC_AWARE、または TRAFFIC_AWARE_OPTIMAL に設定します。各オプションのデータ品質とレイテンシは異なります。詳細については、トラフィック データを含める方法と含めるかどうかを指定するをご覧ください。
  • routingParameters.setRouteModifiers() を使用して、avoidTollsavoidHighwaysavoidFerriesavoidIndoor に指定します。これらのオプションの詳細については、回避するルート特徴を指定をご覧ください。

次の例では、移動モードを DRIVE として指定し、高速道路を回避するように指定します。

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