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

Đô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. Khi sử dụng mã thông báo tuyến đường từ Routes API, Routes Preferred API hoặc Route Optimization API, bạn có thể chỉ định hai điều cho tuyến đường đã lên kế hoạch:

  • Một hình nhiều đường cho tuyến đường

  • Mục tiêu của tuyến đường

Sau đây là một số ví dụ về 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 nâng cao 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: Hoạt động điều phối dịch vụ có thể muốn giảm thiểu thời gian cần thiết để đưa người vận hành đến yêu cầu công việc.

  • 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 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 cho tuyến đường bằng mã thông báo tuyến đường, hãy xem phần Lấy mã thông báo tuyến đường trong Routes API và Chuyển đổi hình nhiều đường và mã thông báo tuyến đường trong Route Optimization API.

Lý do nên sử dụng mã thông báo tuyến đường cho mục tiêu 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ó 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 trước cho tuyến đường để Navigation SDK sử dụng.

  • Chọn tuyến đường phù hợp nhất để SDK chỉ đường sử dụng. Nếu 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 truyền mã thông báo đó đến SDK Điều hướng.

  • Ước tính trước giá, bao gồm cả thông tin ước tính về thời gian đến dự kiế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 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ư tuyến đường 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ập kế hoạch cho tuyến đường bằng cách sử dụng các mục tiêu của 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 đường:

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

  2. Bạn truyền mã thông báo tuyến đường đến SDK Điều hướng.

  3. SDK Điều hướng bắt đầu điều hướng trên tuyến đường bạn đã lên kế hoạch, ngay cả khi có tuyến đường nhanh hơn.

  4. Trong chuyến đi, nếu tình trạng giao thông hoặc đường sá thay đổi hoặc nếu xe rời khỏi tuyến đường đã lên kế hoạch, thì SDK Điều hướng sẽ tính toán một tuyến đường mới tuân theo các mục tiêu và lựa chọn định tuyến được đặt trong mã thông báo tuyến đường của bạn.

Quy trình này giúp tuyến đường thực tế gần với tuyến đường bạn đã lên kế hoạch nhất có thể.

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

Tính năng đi theo chỉ dẫn sẽ bắt đầu trên tuyến đường bạn đã lên kế hoạch, nhưng tuyến đường thực tế có thể khác với tuyến đường đó trong các trường hợp như sau:

  • Xe bắt đầu di chuyển từ điểm xuất phát đã lên kế hoạch.
  • Tình trạng giao thông hoặc đường sá thay đổi trong chuyến đi.
  • Xe rời khỏi tuyến đường đã lên kế hoạch.

Những điểm khác biệt này có thể ảnh hưởng đến quãng đường, thời gian đến dự kiến và các yếu tố quan trọng khác của chuyến đi mà bạn đã lên kế hoạch.

Lên kế hoạch cho 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 rồi truyền mã đó đế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 đườ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 travelMode thành DRIVE hoặc TWO_WHEELER.
    • Đặt routingPreference thành TRAFFIC_AWARE hoặc TRAFFIC_AWARE_OPTIMAL.
    • Không sử dụng Via điểm tham chiếu.

Bước 2: Truyền mã thông báo tuyến đường đến SDK Điều hướng

  1. Lưu trữ mã thông báo tuyến đường: 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 đường. Ví dụ:

    String 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. Truyền mã thông báo tuyến đường đến SDK Điều hướng bằng phương thức Navigator.setDestinations, chỉ định cùng một điểm tham chiếu đích 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ụ

Ví dụ về mã 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 đường và SDK điều hướng tương tác

Sau đây là cách SDK chỉ đường xử lý tuyến đường bạn đã lên kế hoạch:

  • Sử dụng các lựa chọn định tuyến được đặt trong mã thông báo tuyến đường thay vì các chế độ cài đặt sau trong ứng dụng, kể cả khi ứng dụng tính toán một tuyến đường mới trong chuyến đi:

    • RoutingOptions.avoidHighways()
    • RoutingOptions.avoidTolls()
    • RoutingOptions.avoidFerries()
    • Navigator.setLicensePlateRestrictionInfo()
    • Phương thức di chuyển được đặt trong ứng dụng của bạn
  • Tuân theo các chế độ cài đặt này khi tính toán hoặc điều chỉnh tuyến đường:

    • Mục tiêu của tuyến đường từ mã thông báo tuyến đường, chẳng hạn như tuyến đường thân thiện với môi trường hoặc tuyến đường ngắn nhất. Nếu phải điều chỉnh tuyến đường, 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.

    • Các lựa chọn liên quan đến điểm tham chiếu trong ứng dụng của bạn, chẳng hạn như lựa chọn ưu tiên về lề đường. Sử dụng cùng một lựa chọn liên quan đến điểm tham chiếu mà bạn đã chỉ định khi yêu cầu mã thông báo tuyến đường.