Lên kế hoạch tuyến đường

Đôi khi, bạn có thể muốn lên kế hoạch cho tuyến đường mà ứng dụng của bạn cung cấp cho người dùng. Việc sử dụng mã thông báo tuyến đường từ Routes API, Routes Preferred API hoặc Route Optimization API có thể giúp bạn chỉ định 2 điều cho tuyến đường đã lên kế hoạch:

  • Đường đa tuyến cho tuyến đường

  • Mục tiêu của bạn đối với 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 logistics có thể muốn cải thiện hiệu quả của tài xế và giảm chi phí nhiên liệu.

  • Giảm thiểu thời gian đến đích: Một hoạt động điều phối dịch vụ có thể muốn giảm thiểu thời gian để điều phối nhân viên đến địa điểm theo yêu cầu.

  • Giảm chi phí và cải thiện độ an toàn: Một doanh nghiệp đi chung xe có thể muốn tìm một tuyến đường ít tốn kém hơn cho người đi xe và tránh một số khu vực vì lý do an toàn.

Để biết thêm thông tin về cách lên kế hoạch cho một tuyến đường bằng mã thông báo tuyến đường, hãy xem bài viết Yêu cầu mã thông báo tuyến đường trong Routes API và Chuyển đổi đường đa tuyến và mã thông báo trong Route Optimization API.

Lý do nên sử dụng mã thông báo tuyến đường cho các mục tiêu của tuyến đường

Với mã thông báo tuyến đường từ Routes API, Routes Preferred API hoặc Route Optimization API, bạn có thể kiểm soát nhiều hơn đối với tuyến đường được cung cấp:

  • Lên kế hoạch trước cho một tuyến đường để Navigation SDK sử dụng khi có thể.

  • Chọn tuyến đường tốt nhất để Navigation SDK sử dụng. Nếu bạn yêu cầu mã thông báo tuyến đường khi tạo tuyến đường trong Routes API, bạn sẽ nhận được mã thông báo tuyến đường cho mỗi tuyến đường đượ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 chuyển mã thông báo đó sang Navigation SDK.

  • Ước tính trước giá, bao gồm cả ước tính về Thời gian đến dự kiến (ETA) và khoảng cách. Mặc dù chi phí và thời gian thực tế có thể khác nhau, nhưng việc ước tính này sẽ 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 nâng cao hơn cho tuyến đường, 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 đường

Bạn có thể sử dụng Routes API, Routes Preferred API hoặc Route Optimization API để lên kế hoạch cho một tuyến đường bằng các mục tiêu của tuyến đường. Bạn có thể chuyển mã thông báo tuyến đường được trả về từ bất kỳ API nào trong số này sang Navigation SDK để hướng dẫn cách định tuyến cho phương tiện của bạn.

Sau đây là những điều xảy ra khi bạn yêu cầu và sử dụng mã thông báo tuyến đường:

  1. Routes API, Routes Preferred API hoặc Route Optimization API trả về mã thông báo tuyến đường đã mã hoá, bao gồm hình nhiều đường của tuyến đường và các mục tiêu của tuyến đường.

  2. Bạn chuyển mã thông báo tuyến đường sang Navigation SDK.

  3. Navigation SDK truy xuất tuyến đường hoặc nếu tuyến đường không có sẵn do điều kiện thay đổi, thì sẽ truy xuất tuyến đường phù hợp nhất.

  4. Trong khi lái xe trên tuyến đường, nếu tình trạng giao thông hoặc các điều kiện đường xá khác thay đổi hoặc nếu phương tiện đi lệ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 của tuyến đường trong mã thông báo.

Quá trình này giúp tối đa hoá mức độ gần gũi giữa tuyến đường thực tế và tuyến đường đã lên kế hoạch.

Lý do có thể không tuân theo chính xác tuyến đường đã lên kế hoạch

Hãy xem tuyến đường đã lên kế hoạch và các mục tiêu của tuyến đường là các nguyên tắc cần tuân theo: chúng không mang tính bắt buộ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 bằng giọng nói cung cấp do sự khác biệt về điều kiện đường xá, 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 sự không khớp giữa mục tiêu đã lên kế hoạch và mục tiêu thực tế về khoảng cách và ETA, cùng với các yếu tố quan trọng khác về chất lượng chuyến đi.

Lên kế hoạch cho một tuyến đường bằng mã thông báo tuyến đường

Bạn có thể lên kế hoạch cho một tuyến đường bằng cách tạo mã thông báo tuyến đường rồi chuyển mã thông báo đó sang Navigation SDK, như mô tả trong các bước sau:

Bước 1: Tạo mã thông báo tuyến đường bằng Routes API, Routes Preferred API hoặc Route Optimization API

  1. Yêu cầu mã thông báo tuyến đường bằng một trong các phương thức sau:

  2. Thiết lập yêu cầu Routes API hoặc Routes Preferred API để đáp ứng các yêu cầu về việc sử dụng mã thông báo tuyến đường:

    • Đặt travel_mode thành DRIVE hoặc TWO_WHEELER
    • Đặt routing_preference thành TRAFFIC_AWARE hoặc TRAFFIC_AWARE_OPTIMAL
    • KHÔNG sử dụng điểm tham chiếu Via

Bước 2: Chuyển mã thông báo tuyến đường sang Navigation SDK

  1. Lưu trữ mã thông báo tuyến đường: Trong Navigation SDK, hãy thiết lập một chuỗi để lưu trữ mã thông báo tuyến đường. Ví dụ:

    let routeToken = "route token returned by Routes API"
    

    Ví dụ về mã thông báo tuyến đường được trả về:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Chuyển mã thông báo tuyến đường sang Navigation SDK bằng mapView.navigator.setDestinations. Chỉ định các điểm tham chiếu đến giống như bạn đã sử dụng khi tạo mã thông báo tuyến đường:

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

    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 người dùng đến điểm đến đã cho, thì phương thức này sẽ trả về RouteStatus.OK.

Các tình huống có nhiều điểm dừng

Bạn có thể định cấu hình tối đa 25 điểm tham chiếu.

Phương thức setDestinations không hỗ trợ hành trình có nhiều điểm dừng. Sử dụng continueToNextDestinationWithCompletion() để chuyển điểm tham chiếu sang chặng tiếp theo của hành trình.

Ví dụ

Các ví dụ về mã sau đây minh hoạ cách truy xuất một tuyến đường đã lên kế hoạch.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                        routeToken:routeToken
                          callback:^(GMSRouteStatus routeStatus){...}];

Cách mã thông báo tuyến đường và Navigation SDK tương tác

Sau đây là cách tuyến đường do Navigation SDK tạo và tuyến đường đã lên kế hoạch trong mã thông báo tuyến đường tương tác:

  • Ghi đè mọi điểm đến đã đặt trước đó.

  • Sử dụng vị trí xuất phát của phương tiện.

  • Điều chỉnh theo điều kiện đường xá và tình trạng giao thông. Xem bài viết Lý do có thể không tuân theo chính xác tuyến đường đã lên kế hoạch.

  • 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
  • Tuân theo:

    • Các tuỳ chọn liên quan đến điểm tham chiếu, chẳng hạn như lựa chọn ưu tiên về phía đường.

    • Mục tiêu của tuyến đường. Nếu Navigation SDK phải điều chỉnh tuyến đường được trả về, thì sẽ sử dụng các mục tiêu của 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 tham chiếu giống như bạn đã chỉ định trong Routes API.