Kết hợp thông tin tóm tắt về tuyến đường với tính năng tìm kiếm dọc theo tuyến đường
Bạn có thể kết hợp các phép tính thông tin tóm tắt về tuyến đường với tính năng tìm kiếm dọc theo tuyến đường. Trong trường hợp này, Tìm kiếm văn bản (Mới) sẽ trả về thời lượng và khoảng cách di chuyển đến từng địa điểm trong phản hồi, rồi từ từng địa điểm đến điểm đến cuối cùng của tuyến đường.
Cách sử dụng tính năng Tìm kiếm văn bản (Mới) để tính toán thông tin tóm tắt về tuyến đường cùng với tính năng tìm kiếm dọc theo tuyến đường:
-
Sử dụng Routes API để tính toán một tuyến đường trả về đường nhiều đoạn của tuyến đường trong phản hồi.
-
Sử dụng
searchAlongRouteParameters.setPolyline()để chuyển đường nhiều đoạn của tuyến đường đến tính năng Tìm kiếm bằng văn bản (Mới) nhằm ưu tiên kết quả tìm kiếm cho tuyến đường. Sau đó, phản hồi sẽ chứa các địa điểm phù hợp với tiêu chí tìm kiếm và cũng nằm gần tuyến đường đã chỉ định. -
Khi tạo đối tượng yêu cầu, hãy thêm
.setRoutingSummariesIncluded(true).
Theo mặc định, tính năng Tìm kiếm văn bản (Mới) sẽ thực hiện tìm kiếm dọc theo toàn bộ tuyến đường:
// 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(); });
Phản hồi chứa các đối tượng bao gồm danh sách các trường địa điểm được yêu cầu và thông tin tóm tắt về tuyến đường
chứa thời lượng và khoảng cách di chuyển đến từng địa điểm.
Bạn có thể gọi SearchByTextResponse.getRoutingSummaries() để trả về danh sách thông tin tóm tắt về tuyến đường.
Đối với mỗi mục trong mảng legs, Tìm kiếm văn bản (Mới) sẽ trả về thời gian của chuyến đi gồm 2 chặng:
-
Chặng đầu tiên chứa thời lượng và khoảng cách di chuyển từ điểm xuất phát đến địa điểm.
-
Chặng thứ hai chứa thời lượng và khoảng cách di chuyển từ địa điểm đến điểm đến của tuyến đường.
Chỉ định điểm xuất phát của tuyến đường, phương thức di chuyển và các thành phần sửa đổi tuyến đường
Bạn có thể sửa đổi phép tính tìm kiếm và thông tin tóm tắt về tuyến đường bằng cách chỉ định điểm xuất phát của tuyến đường, phương thức di chuyển, các thành phần sửa đổi tuyến đường và lựa chọn ưu tiên về tuyến đường. Phương thức di chuyển và các thành phần sửa đổi tuyến đường hoạt động giống như khi tính toán thông tin tóm tắt về tuyến đường mà không chỉ định tuyến đường như trong chủ đề Chỉ định các lựa chọn di chuyển.
Theo mặc định, chặng đầu tiên của mỗi kết quả chứa khoảng cách từ điểm khởi hành do hình nhiều đường xác định đến từng địa điểm. Tuy nhiên, bạn có thể ghi đè giá trị mặc định đó bằng cách chỉ định rõ ràng điểm xuất phát của tuyến đường trong yêu cầu. Nếu được chỉ định, chặng đầu tiên của tất cả phản hồi sẽ chỉ định khoảng cách và thời lượng từ điểm khởi hành của tuyến đường đã chỉ định, ghi đè điểm khởi hành từ hình nhiều đường.
Trong ví dụ tiếp theo, bạn chỉ định điểm xuất phát của tuyến đường là toạ độ của San Mateo, CA, chỉ định tránh đường thu phí và đặt số lượng kết quả là 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(); });
Hình ảnh sau đây cho thấy một bản đồ chứa hình nhiều đường của tuyến đường, điểm xuất phát mới (ghim màu xanh nhạt) và các địa điểm trong kết quả tìm kiếm (ghim màu xanh lục). Hãy lưu ý rằng tất cả kết quả đều nằm dọc theo tuyến đường nhưng ở phía sau San Mateo: