חישוב סיכום ניתוב

כדי להשתמש בחיפוש טקסט (חדש) או בחיפוש בקרבת מקום (חדש) כדי לחשב את משך הנסיעה ואת המרחק לכל מקום בתשובה:

  1. מעבירים את הפרמטר RoutingParameters בבקשה, ומשתמשים ב-setOrigin() כדי לציין את קואורדינטות קו האורך וקו הרוחב של מקור הניתוב. הפרמטר הזה נדרש כדי לחשב את משך הנסיעה ואת המרחק לכל מקום בתגובה.

  2. כשיוצרים את אובייקט הבקשה, מוסיפים את .setRoutingSummariesIncluded(true).

שימוש בחיפוש טקסט (חדש)

בבקשה הבאה, מחשבים את משך הנסיעה ואת המרחק לכל מקום בתשובה של 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();
    });

הכיתה SearchByTextResponse מייצגת את התגובה לבקשת חיפוש. אפשר להפעיל את SearchByTextResponse.getRoutingSummaries() כדי להציג את רשימת סיכומי הניתוב. אובייקט SearchByTextResponse מכיל גם את הפרטים הבאים:

  • רשימה של אובייקטים מסוג Place שמייצגים את כל המקומות התואמים, עם אובייקט 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 שמייצגים את כל המקומות התואמים, עם אובייקט Place אחד לכל מקום תואם.
  • כל אובייקט Place מכיל רק את השדות שמוגדרים ברשימת השדות שמועברת בבקשה.

אין צורך להשתמש באותן קואורדינטות להגבלת המיקום ולמקור הניתוב. לדוגמה, אפשר להגדיר את הגבלת המיקומים לנקודת המרכז של סידני כדי להגביל את תוצאות החיפוש למעגל הזה. אבל לאחר מכן מגדירים את נקודת המוצא לניתוב לפי הקואורדינטות של הבית, כלומר למיקום אחר בתוך עיגול החיפוש. לאחר מכן, הבקשה מגבילה את תוצאות החיפוש למעגל ומחשבת את סיכומי המסלולים על סמך המיקום של הבית.

ציון אפשרויות הנסיעה

כברירת מחדל, החישובים של משך הזמן והמרחק הם לרכב. עם זאת, תוכלו לקבוע את סוג הרכב ואפשרויות אחרות בחיפוש.

בדוגמה הבאה, מציינים את מצב הנסיעה בתור 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();
    });