Tính toán thông tin tóm tắt về tuyến đường
Cách sử dụng Tìm kiếm văn bản (Mới) hoặc Nearby Search (Mới) để tính thời gian và khoảng cách di chuyển đến từng địa điểm trong kết quả:
-
Truyền tham số
RoutingParameterstrong yêu cầu, sử dụngsetOrigin()để chỉ định toạ độ vĩ độ và kinh độ của điểm xuất phát của tuyến đường. Tham số này là bắt buộc để tính toán thời lượng và khoảng cách đến từng địa điểm trong phản hồi. -
Khi tạo đối tượng yêu cầu, hãy thêm
.setRoutingSummariesIncluded(true).
Sử dụng tính năng Tìm kiếm văn bản (Mới)
Trong yêu cầu sau, bạn tính toán thời gian và khoảng cách di chuyển đến từng địa điểm trong phản hồi của tính năng Tìm kiếm bằng văn bản (Mới):
// 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(); });
Lớp SearchByTextResponse đại diện cho phản hồi từ một yêu cầu tìm kiếm.
Bạn có thể gọi SearchByTextResponse.getRoutingSummaries() để trả về danh sách thông tin tóm tắt về việc định tuyến.
Đối tượng SearchByTextResponse cũng chứa:
- Một danh sách các đối tượng
Placebiểu thị tất cả những địa điểm trùng khớp, trong đó có một đối tượngPlacecho mỗi địa điểm trùng khớp. - Mỗi đối tượng
Placechỉ chứa các trường do danh sách trường xác định được truyền trong yêu cầu.
Sử dụng Nearby Search
Trong ví dụ này, bạn sẽ tính toán thời gian và khoảng cách di chuyển đến từng địa điểm trong phản hồi của tính năng Nearby Search. Ví dụ này tìm các nhà hàng ở Sydney, Úc và đặt giới hạn vị trí cũng như điểm xuất phát của tuyến đường thành cùng một toạ độ vĩ độ và kinh độ:
// 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(); });
Lớp SearchNearbyResponse đại diện cho phản hồi từ một yêu cầu tìm kiếm.
Bạn có thể gọi SearchNearbyResponse.getRoutingSummaries() để trả về danh sách thông tin tóm tắt về việc định tuyến.
Đối tượng SearchNearbyResponse cũng chứa:
- Một danh sách các đối tượng
Placebiểu thị tất cả những địa điểm trùng khớp, với một đối tượngPlacecho mỗi địa điểm trùng khớp. - Mỗi đối tượng
Placechỉ chứa các trường được xác định theo danh sách trường được truyền trong yêu cầu.
Bạn không cần phải sử dụng cùng một toạ độ cho hạn chế về vị trí và cho điểm bắt đầu định tuyến. Ví dụ: bạn đặt chế độ hạn chế vị trí thành điểm trung tâm của Sydney để giới hạn kết quả tìm kiếm trong vòng tròn đó. Nhưng sau đó, bạn đặt điểm xuất phát của tuyến đường thành toạ độ của nhà bạn, tức là một vị trí khác trong vòng tròn tìm kiếm. Sau đó, yêu cầu này sẽ giới hạn kết quả tìm kiếm trong vòng tròn và tính toán thông tin tóm tắt về đường đi dựa trên vị trí nhà của bạn.
Chỉ định các lựa chọn di chuyển
Theo mặc định, các phép tính về thời lượng và khoảng cách là dành cho ô tô. Tuy nhiên, bạn có thể kiểm soát loại xe cũng như các lựa chọn khác trong kết quả tìm kiếm.
-
Sử dụng
routingParameters.setTravelMode()để đặt chế độ di chuyển thànhDRIVE,BICYCLE,WALKhoặcTWO_WHEELER. Để biết thêm thông tin về các lựa chọn này, hãy xem phần Các loại xe có thể dùng cho tuyến đường. -
Sử dụng
routingParameters.setRoutingPreference()để đặt lựa chọn ưu tiên về định tuyến thànhTRAFFIC_UNAWARE(mặc định),TRAFFIC_AWAREhoặcTRAFFIC_AWARE_OPTIMAL. Mỗi lựa chọn có mức độ chất lượng dữ liệu và độ trễ khác nhau. Để biết thêm thông tin, hãy xem phần Chỉ định cách thức và liệu có nên đưa dữ liệu giao thông vào hay không. -
Sử dụng
routingParameters.setRouteModifiers()để chỉ định choavoidTolls,avoidHighways,avoidFerriesvàavoidIndoor. Để biết thêm thông tin về các lựa chọn này, hãy xem phần Chỉ định các đặc điểm của tuyến đường cần tránh.
Trong ví dụ tiếp theo, bạn chỉ định phương tiện đi lại là DRIVE và tránh đường cao tố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() .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(); });