Đôi khi, bạn có thể muốn lập kế hoạch cho tuyến đường mà ứng dụng cung cấp cho người dùng. Việc sử dụng mã thông báo tuyến từ Routes API, Routes Preferred API hoặc Route Optimization API có thể giúp bạn chỉ định hai thông tin cho tuyến đường đã lên kế hoạch:
Hình nhiều đường cho tuyến đường
Mục tiêu của tuyến đường
Ví dụ: sau đây là một số mục tiêu định tuyến mà bạn có thể có:
Giảm thiểu thời gian giao hàng: Một doanh nghiệp giao đồ ăn có thể muốn giảm thiểu thời gian giao đồ ăn.
Giảm thiểu thời gian di chuyển hoặc mức tiêu thụ nhiên liệu: Một doanh nghiệp hậu cần có thể muốn cải thiện hiệu suất của tài xế và giảm chi phí nhiên liệu.
Giảm thiểu thời gian đến đích: Thao tác điều phối dịch vụ có thể muốn giảm thiểu thời gian cần thiết để đưa các nhà điều hành đến một yêu cầu công việc.
Giảm chi phí và cải thiện sự an toàn: Một doanh nghiệp đi chung xe có thể muốn tìm một tuyến đường có chi phí thấp hơn cho người đi xe và tránh một số khu vực nhất định vì lý do an toàn.
Để biết thêm thông tin về cách lập kế hoạch tuyến bằng mã thông báo tuyến, hãy xem phần Yêu cầu mã thông báo tuyến trong Routes API và Đường đa tuyến chuyển đổi và mã thông báo tuyến trong Route Optimization API.
Lý do sử dụng mã thông báo tuyến cho mục tiêu tuyến
Với mã thông báo tuyến đường từ Routes API, Route Preferred API hoặc Route Optimization API, bạn có nhiều quyền kiểm soát hơn đối với tuyến đường được cung cấp:
Lên kế hoạch đường đi trước để SDK Điều hướng sử dụng khi có thể.
Chọn tuyến đường tốt nhất để SDK Điều hướng sử dụng. Nếu yêu cầu mã thông báo tuyến khi tạo tuyến trong Routes API, bạn sẽ nhận được mã thông báo tuyến cho mỗi tuyến được tạo. Sau đó, bạn có thể chọn mã thông báo cho tuyến đường mà bạn muốn sử dụng khi truyền mã thông báo đó đến SDK Điều hướng.
Ước tính giá trước, bao gồm cả thông tin ước tính về thời gian đến và khoảng cách. Mặc dù chi phí và thời gian thực tế có thể khác nhau, nhưng thông tin ước tính này sẽ giúp giảm khoảng cách giữa chi phí dự kiến và chi phí thực tế của tuyến đường.
Chỉ định các mục tiêu tuyến đường nâng cao hơn, chẳng hạn như định tuyến thân thiện với môi trường hoặc tuyến đường ngắn nhất.
Cách hoạt động của mã thông báo tuyến
Bạn có thể sử dụng Routes API, Routes Preferred API hoặc Route Optimization API để lập kế hoạch tuyến đường bằng các mục tiêu tuyến đường. Bạn có thể truyền mã thông báo tuyến đường được trả về từ bất kỳ API nào trong số này đến SDK Điều hướng để hướng dẫn cách định tuyến xe của bạn.
Sau đây là những gì xảy ra khi bạn yêu cầu và sử dụng mã thông báo tuyến:
Routes API, Routes Preferred API hoặc Route Optimization API trả về một mã thông báo tuyến đường được mã hoá bao gồm đường đa tuyến và mục tiêu tuyến đường.
Bạn truyền mã thông báo tuyến đến SDK Điều hướng.
SDK Điều hướng sẽ truy xuất tuyến đường hoặc nếu không có tuyến đường do điều kiện thay đổi, thì SDK này sẽ truy xuất tuyến đường phù hợp nhất.
Trong khi lái xe theo tuyến đường, nếu tình trạng giao thông hoặc các điều kiện đường khác thay đổi hoặc nếu xe đi chệch khỏi tuyến đường đã lên kế hoạch, thì các tuyến đường đã sửa đổi sẽ liên tục cố gắng khớp với tuyến đường tốt nhất dựa trên các mục tiêu tuyến đường trong mã thông báo.
Quy trình này giúp tối đa hoá mức độ gần gũi của tuyến đường thực tế với tuyến đường bạn đã lên kế hoạch.
Lý do có thể khiến tuyến đường đã lên kế hoạch không được tuân thủ chính xác
Hãy coi tuyến đường và mục tiêu tuyến đường đã lên kế hoạch là các nguyên tắc cần tuân thủ: chúng không phải là quy tắc. Bạn có thể thấy sự khác biệt giữa tuyến đường đã lên kế hoạch và tuyến đường do tính năng chỉ đường có hướng dẫn cung cấp do sự khác biệt về điều kiện đường, vị trí xuất phát hoặc các tham số khác đã thay đổi kể từ khi bạn tạo tuyến đường đã lên kế hoạch. Sự khác biệt này có thể dẫn đến việc không khớp giữa mục tiêu về quãng đường và thời gian đến dự kiến (ETA) theo kế hoạch và thực tế, cùng với các đặc điểm quan trọng khác của chuyến đi.
Lập kế hoạch tuyến đường bằng mã thông báo tuyến đường
Bạn có thể lập kế hoạch cho một tuyến đường bằng cách tạo mã thông báo tuyến đường, sau đó chuyển mã thông báo đó đến SDK Điều hướng, như mô tả trong các bước sau:
Bước 1: Tạo mã thông báo tuyến bằng Routes API, Routes Preferred API hoặc Route Optimization API
Yêu cầu mã thông báo tuyến bằng một trong các phương thức sau:
Routes API (API tuyến):
computeRoutes
. Để biết thêm thông tin về cách yêu cầu mã thông báo tuyến trong Routes API, hãy xem phần Tính toán tuyến và Yêu cầu mã thông báo tuyến.Routes Preferred API (API ưu tiên của tuyến):
computeCustomRoutes
. Để biết thêm thông tin về cách yêu cầu mã thông báo tuyến trong API Routes Preferred, hãy xem phần Lập kế hoạch tuyến.Route Optimization API (API Tối ưu hoá tuyến):
optimizeTours
hoặcbatchOptimizeTours
. Để biết thêm thông tin về cách yêu cầu mã thông báo tuyến trong API Tối ưu hoá tuyến đường, hãy xem phần Đường đa giác chuyển đổi và mã thông báo tuyến.
Thiết lập yêu cầu API Routes hoặc API Routes Preferred để đáp ứng các yêu cầu về việc sử dụng mã thông báo tuyến:
- Đặt
travel_mode
thànhDRIVING
hoặcTWO_WHEELER
- Đặt
routing_preference
thànhTRAFFIC_AWARE
hoặcTRAFFIC_AWARE_OPTIMAL
- KHÔNG sử dụng điểm trung gian
Via
- Đặt
Bước 2: Truyền mã thông báo tuyến đường đến SDK Điều hướng
Lưu trữ mã thông báo tuyến: Trong SDK Điều hướng, hãy thiết lập một chuỗi để lưu trữ mã thông báo tuyến. Ví dụ:
String routeToken = "route token returned by Routes API";
Ví dụ về mã thông báo tuyến được trả về:
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }
Chuyển mã thông báo tuyến đường đến SDK Điều hướng bằng cách sử dụng phương thức
Navigator.setDestinations
, chỉ định cùng một điểm trung gian đích đến mà bạn đã sử dụng khi tạo mã thông báo tuyến đường:setDestinations(List
destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions); Ví dụ:
CustomRoutesOptions customRoutesOptions = CustomRoutesOptions.builder() .setRouteToken(routeToken) .setTravelMode(TravelMode.DRIVING) .build();
Phương thức Navigator.setDestinations
trả về trạng thái của yêu cầu. Nếu tìm thấy một tuyến đường từ vị trí của xe đến điểm đến đã cho, thì hàm này sẽ trả vềRouteStatus.OK
.
Để biết thêm thông tin về phương thức này, hãy xem Navigator.setDestinations
.
Ví dụ:
Mã ví dụ sau đây minh hoạ cách chỉ định một tuyến đường đã lên kế hoạch bằng mã thông báo tuyến đường.
ArrayList <Waypoint> destinations = Lists.newArrayList();
Waypoint waypoint1 =
Waypoint.builder()
.setLatLng(10, 20)
.setTitle("title")
.setVehicleStopover(true)
.build();
destinations.add(waypoint1);
Waypoint waypoint2 =
Waypoint.builder()
.setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
.setTitle("title")
.setVehicleStopover(true)
.build()
destinations.add(waypoint2);
String routeToken = "route token returned by Routes API";
CustomRoutesOptions customRoutesOptions =
CustomRoutesOptions.builder()
.setRouteToken(routeToken)
.setTravelMode(TravelMode.DRIVING)
.build();
// Existing flow to get a Navigator.
NavigationApi.getNavigator(...);
// Existing flow for requesting routes.
ListenableResultFuture<RouteStatus> routeStatusFuture =
navigator.setDestinations(destinations, customRoutesOptions);
// Or with display options.
DisplayOptions displayOptions = new DisplayOptions();
ListenableResultFuture<RouteStatus> routeStatusFuture =
navigator.setDestinations(destinations, customRoutesOptions, displayOptions);
Cách mã thông báo tuyến và Navigation SDK tương tác
Dưới đây là cách tuyến đường do SDK Điều hướng tạo và tuyến đường đã lên kế hoạch trong mã thông báo tuyến đường tương tác với nhau:
Ghi đè mọi đích đến đã đặt trước đó.
Sử dụng vị trí bắt đầu của xe.
Điều chỉnh theo điều kiện đường và giao thông. Xem bài viết Lý do khiến tuyến đường đã lên kế hoạch có thể không được tuân thủ chính xác.
Bỏ qua các tuỳ chọn liên quan đến định tuyến sau đây vì không cần thiết:
avoidsHighways
avoidsTolls
avoidsFerries
licensePlateRestriction
Theo dõi:
Các tuỳ chọn liên quan đến điểm trung gian, chẳng hạn như lựa chọn ưu tiên bên đường.
Mục tiêu tuyến. Nếu phải điều chỉnh tuyến đường được trả về, SDK Điều hướng sẽ sử dụng các mục tiêu tuyến đường mà bạn chỉ định khi yêu cầu mã thông báo tuyến đường. Vì lý do này, bạn nên sử dụng các tuỳ chọn liên quan đến điểm trung gian giống như bạn đã chỉ định trong API Tuyến đường.