לשלב סיכומי ניתוב עם חיפוש לאורך המסלול

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

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

  1. משתמשים ב-Routes API כדי לחשב מסלול שמחזיר קו פוליגון של מסלול בתגובה.

  2. משתמשים ב-searchAlongRouteParameters.setPolyline() כדי להעביר את קו הפוליגון של המסלול לחיפוש טקסט (חדש) כדי להטות את תוצאות החיפוש למסלול. התשובה תכלול מקומות שתואמים לקריטריונים לחיפוש וגם נמצאים ליד המסלול שצוין.

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

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

// Define the route polyline object using the route string.
EncodedPolyline encodedPolyline = EncodedPolyline.newInstance("wblcFptchVIFOd@G@EVw@Ms@dHKR}ApNA`AF~@Hf@TjAb@bBb@~@n@p@^Rd@~@Vz@HVz@nDLt@?d@Kr@c@~@mD`G?`@aEfGkCnDuChDm`@bb@[`@{GhHeEdEciBnnBkC`DkC~DaClEuKjT_Z|l@Qb@iR~_@}EzJ_AdB_Und@kAfCaOjZkg@vcAqBzD_]rr@iBlEaBxEgArD}AlG}AhHsA`IeAnH{@dIq@dJgL~iBq@rHu@vGgAtHwArHaBhHkBzG_DpJ}Nbc@iBhGkA|EgC|LcIjb@oAhG_AvDgAdDkApC_BzCiBpCsFvGii@vn@scAxlAmLjNgSzUeRjT{TzWqExEmG|FuNlMmMhLaRvPqOlNmbAl}@mFlF{PlOmJfIoElE}LtMiSbU_H`I}}@jcAwl@vp@oAbBqA~BeAhCm@tBg@fCWrBQ~BI|DaB~rBO~D[bEa@`Dm@pDaAdE{@vC_BbEkB~Def@|z@sEzHKJeS~]}K`S{\\~l@cXpe@sBpDm@bAuCxDkBrBiC~BwCtByBnAcBx@}Bt@{Bn@gh@|LaOpDeFhAoDj@aE^kVrA_E^iEr@yD~@uBr@gMjF_EnAcCh@eFr@_DRsAD}@Jsu@xCWDqIV}BCeCOyDm@cBa@_DmA}JeE_CwAsBcBiBoBuAqBmOoX{CuEkB_CoDqDkVoUoD{CeE_DkEkC_FeCqB}@sDuAoDgAeCe@cCW}CK}BDaDTeOlBcuBrYaNlBq@Dyd@rGyFt@yBb@eBf@oCnAoBlAkIpGkAp@wBbAaCt@oFdAwKjBoGxA{FbByIjC_HfB_@KmNdDuC|@uFzBcH|C{@\\[?sBv@}@VaBVoA@y@EmAQcA[w@]aBkAeAkA}BuDUKs@uAqBsCwBcCgAiAiN_MyKsJsG{GkBaBiBuA{BwAwDkBcOaHiC_AiCg@}BQcCAcBHqBVkB`@qEjAu@LgCVgAHwG@sG?mABsH^eNr@mBXy@NqBt@uAt@aBlAkAlA}BtCyApBiAdB_BxB{A`B}@j@oAf@s@PeCVcIf@gAAkAQy@YiAo@_A{@_DgEgJqM_DeEaM}PoBiCzAsBw@kAdAGVk@f@q@z@C
");

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);

// Define the search along route parameters object and pass the polyline object.
SearchAlongRouteParameters searchAlongRouteParameters = SearchAlongRouteParameters.builder()
    .setPolyline(encodedPolyline)
    .build();

// Use the builder to create a SearchByTextRequest object and pass the search along route parameters.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields)
    .setMaxResultCount(10)
    .setSearchAlongRouteParameters(searchAlongRouteParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned List of Place 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.getRoutingSummaries() כדי להציג את רשימת סיכומי הניתוב.

לכל רשומה במערך legs, פונקציית Text Search (New) מחזירה את משך הנסיעה בשתי קטעים:

  • הקטע הראשון מכיל את משך הנסיעה ואת המרחק מהמוצא אל המקום.

  • הצעד השני מכיל את משך הנסיעה ואת המרחק מהמקום ליעד המסלול.

ציון מקור הניתוב, מצב הנסיעה ומגבילי המסלול

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

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

בדוגמה הבאה, מציינים את נקודת המוצא לניתוב כקואורדינטות של סן מתאו, קליפורניה, מציינים שרוצים להימנע מתשלום אגרות ומגדירים את מספר התוצאות ל-5:

// Define the route polyline object using the route string.
EncodedPolyline encodedPolyline = EncodedPolyline.newInstance("wblcFptchVIFOd@G@EVw@Ms@dHKR}ApNA`AF~@Hf@TjAb@bBb@~@n@p@^Rd@~@Vz@HVz@nDLt@?d@Kr@c@~@mD`G?`@aEfGkCnDuChDm`@bb@[`@{GhHeEdEciBnnBkC`DkC~DaClEuKjT_Z|l@Qb@iR~_@}EzJ_AdB_Und@kAfCaOjZkg@vcAqBzD_]rr@iBlEaBxEgArD}AlG}AhHsA`IeAnH{@dIq@dJgL~iBq@rHu@vGgAtHwArHaBhHkBzG_DpJ}Nbc@iBhGkA|EgC|LcIjb@oAhG_AvDgAdDkApC_BzCiBpCsFvGii@vn@scAxlAmLjNgSzUeRjT{TzWqExEmG|FuNlMmMhLaRvPqOlNmbAl}@mFlF{PlOmJfIoElE}LtMiSbU_H`I}}@jcAwl@vp@oAbBqA~BeAhCm@tBg@fCWrBQ~BI|DaB~rBO~D[bEa@`Dm@pDaAdE{@vC_BbEkB~Def@|z@sEzHKJeS~]}K`S{\\~l@cXpe@sBpDm@bAuCxDkBrBiC~BwCtByBnAcBx@}Bt@{Bn@gh@|LaOpDeFhAoDj@aE^kVrA_E^iEr@yD~@uBr@gMjF_EnAcCh@eFr@_DRsAD}@Jsu@xCWDqIV}BCeCOyDm@cBa@_DmA}JeE_CwAsBcBiBoBuAqBmOoX{CuEkB_CoDqDkVoUoD{CeE_DkEkC_FeCqB}@sDuAoDgAeCe@cCW}CK}BDaDTeOlBcuBrYaNlBq@Dyd@rGyFt@yBb@eBf@oCnAoBlAkIpGkAp@wBbAaCt@oFdAwKjBoGxA{FbByIjC_HfB_@KmNdDuC|@uFzBcH|C{@\\[?sBv@}@VaBVoA@y@EmAQcA[w@]aBkAeAkA}BuDUKs@uAqBsCwBcCgAiAiN_MyKsJsG{GkBaBiBuA{BwAwDkBcOaHiC_AiCg@}BQcCAcBHqBVkB`@qEjAu@LgCVgAHwG@sG?mABsH^eNr@mBXy@NqBt@uAt@aBlAkAlA}BtCyApBiAdB_BxB{A`B}@j@oAf@s@PeCVcIf@gAAkAQy@YiAo@_A{@_DgEgJqM_DeEaM}PoBiCzAsBw@kAdAGVk@f@q@z@C
");

// 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()
    .setAvoidTolls(true)
    .build();

// Define the routing parameters object and pass the routing origin.
// Set the travel mode to DRIVE.
// Pass the routeModifiers object.
RoutingParameters routingParameters = RoutingParameters.builder()
    .setOrigin(toLatLng("37.56617, -122.30870"))
    .setTravelMode(DRIVE)
    .setRouteModifiers(routeModifiers)
    .build();

// Define the search along route parameters object and pass the polyline object.
SearchAlongRouteParameters searchAlongRouteParameters = SearchAlongRouteParameters.builder()
    .setPolyline(encodedPolyline)
    .build();

// Use the builder to create a SearchByTextRequest object and pass the search along route parameters.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields)
    .setMaxResultCount(5)
    .setRoutingParameters(routingParameters)
    .setSearchAlongRouteParameters(searchAlongRouteParameters)
    .setRoutingSummariesIncluded(true)
    .build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned List of Place 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();
    });

בתמונה הבאה מוצגת מפה שמכילה את קו הפוליגון של המסלול, את נקודת המוצא החדשה (סיכה כחולה בהירה) ואת המקומות בתוצאות החיפוש (סיכות ירוקות). שימו לב שכל התוצאות נמצאות לאורך המסלול, אבל אחרי סן מתאו:

תוצאות חיפוש ממקור העדכון.