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

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

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

  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, חיפוש טקסט (חדש) מחזיר זמן נסיעה של שני מקטעים:

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

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

ציון מקור הניתוב, אמצעי התחבורה ושינויים במסלול

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

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

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

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

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