รวมข้อมูลสรุปเส้นทางกับการค้นหาบนเส้นทาง

คุณรวมการคำนวณสรุปเส้นทางเข้ากับการค้นหาตามเส้นทางได้ ในกรณีนี้ การค้นหาข้อความ (ใหม่) จะแสดงระยะเวลาเดินทางและระยะทางไปยังสถานที่แต่ละแห่งในการตอบกลับ จากนั้นจะแสดงจากสถานที่แต่ละแห่งไปยังจุดหมายสุดท้ายของเส้นทาง

วิธีใช้การค้นหาข้อความ (ใหม่) เพื่อคํานวณสรุปเส้นทางพร้อมกับการค้นหาตามเส้นทาง

  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 การค้นหาข้อความ (ใหม่) จะแสดงเวลาเดินทาง 2 ขา ดังนี้

  • ส่วนขาแรกจะมีระยะเวลาและระยะทางเดินทางจากต้นทางไปยังสถานที่

  • ส่วนขาที่ 2 มีระยะเวลาและระยะทางการเดินทางจากจุดหนึ่งไปยังจุดหมายของเส้นทาง

ระบุต้นทางการกำหนดเส้นทาง โหมดการเดินทาง และตัวแก้ไขเส้นทาง

คุณสามารถแก้ไขการคำนวณข้อมูลสรุปการค้นหาและการกำหนดเส้นทางได้โดยระบุต้นทางการกำหนดเส้นทาง โหมดการเดินทาง ตัวแก้ไขเส้นทาง และค่ากำหนดการกำหนดเส้นทาง โหมดการเดินทางและตัวปรับแต่งเส้นทางทำงานเหมือนกับการคำนวณสรุปการกำหนดเส้นทางโดยไม่ต้องระบุเส้นทางดังที่แสดงในหัวข้อระบุตัวเลือกการเดินทาง

โดยค่าเริ่มต้น ช่วงแรกของแต่ละผลลัพธ์จะมีระยะทางจากจุดเริ่มต้นที่ระบุโดยเส้นประกอบไปยังสถานที่แต่ละแห่ง อย่างไรก็ตาม คุณสามารถลบล้างค่าเริ่มต้นดังกล่าวได้โดยระบุต้นทางการกำหนดเส้นทางในคำขออย่างชัดเจน หากระบุไว้ ระยะทางแรกของการตอบกลับทั้งหมดจะระบุระยะทางและระยะเวลาจากต้นทางการกำหนดเส้นทางที่ระบุ ซึ่งจะลบล้างต้นทางจากเส้นประกอบ

ในตัวอย่างถัดไป คุณระบุต้นทางของเส้นทางเป็นพิกัดของซานมาตีโอ แคลิฟอร์เนีย ระบุเพื่อหลีกเลี่ยงค่าผ่านทาง และกำหนดจำนวนผลลัพธ์เป็น 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();
    });

รูปภาพต่อไปนี้แสดงแผนที่ที่มีเส้นประกอบของเส้นทาง จุดต้นทางใหม่ (หมุดสีน้ำเงินอ่อน) และสถานที่ในผลการค้นหา (หมุดสีเขียว) โปรดสังเกตว่าผลการค้นหาทั้งหมดอยู่ตามเส้นทางแต่ผ่านซาน มาเทโอไปแล้ว

ผลการค้นหาจากแหล่งที่มาของการอัปเดต