วางแผนเส้นทาง

บางครั้งคุณอาจต้องการวางแผนเส้นทางที่แอปจะแสดงให้ผู้ใช้เห็น การใช้โทเค็นเส้นทางจาก Routes API หรือ Route Optimization API จะช่วยให้คุณระบุ 2 สิ่งต่อไปนี้สำหรับเส้นทางที่วางแผนไว้ได้

  • เส้นประกอบสำหรับเส้นทาง

  • วัตถุประสงค์ของเส้นทาง

ตัวอย่างวัตถุประสงค์ในการกำหนดเส้นทางที่คุณอาจมี ได้แก่

  • ลดเวลาในการนำส่ง: ธุรกิจที่นำส่งอาหารอาจต้องการลดเวลาที่ใช้ในการนำส่งอาหาร

  • ลดระยะเวลาเดินทางหรือการใช้เชื้อเพลิง: ธุรกิจโลจิสติกส์อาจต้องการปรับปรุงประสิทธิภาพของคนขับและลดต้นทุนเชื้อเพลิง

  • ลดเวลาในการเดินทางไปยังจุดหมาย: การดำเนินการจัดส่งบริการอาจต้องการลดเวลาที่ใช้ในการส่งผู้ปฏิบัติงานไปยังคำของาน

  • ลดค่าใช้จ่ายและเพิ่มความปลอดภัย: ธุรกิจบริการร่วมเดินทางอาจต้องการค้นหาเส้นทางที่มีค่าใช้จ่ายน้อยลงสำหรับผู้ขับขี่และหลีกเลี่ยงบางพื้นที่เพื่อความปลอดภัย

ดูข้อมูลเพิ่มเติมเกี่ยวกับการวางแผนเส้นทางโดยใช้โทเค็นเส้นทางได้ที่หัวข้อรับโทเค็นเส้นทางใน Routes API และเปลี่ยนผ่านเส้นประกอบและโทเค็นเส้นทางใน Route Optimization API

เหตุผลที่ควรใช้โทเค็นเส้นทางสำหรับวัตถุประสงค์ของเส้นทาง

โทเค็นเส้นทางจาก Routes API หรือ Route Optimization API ช่วยให้คุณควบคุมเส้นทางที่ระบุได้มากขึ้น ดังนี้

  • วางแผนเส้นทางล่วงหน้าเพื่อให้ Navigation SDK ใช้

  • เลือกเส้นทางที่ดีที่สุดสำหรับ Navigation SDK เพื่อใช้งาน หากคุณขอโทเค็นเส้นทางเมื่อสร้างเส้นทางใน Routes API คุณจะได้รับโทเค็นเส้นทางสำหรับแต่ละเส้นทางที่สร้างขึ้น จากนั้นคุณสามารถเลือกโทเค็นสำหรับเส้นทางที่ต้องการใช้เมื่อส่งไปยัง Navigation SDK

  • ประเมินราคาล่วงหน้า รวมถึงการประเมินเวลาถึงโดยประมาณและระยะทาง แม้ว่าค่าใช้จ่ายและเวลาจริงอาจแตกต่างกันไป แต่การประมาณนี้จะช่วยลดช่องว่างระหว่างค่าใช้จ่ายของเส้นทางที่คาดไว้กับค่าใช้จ่ายจริง

  • ระบุวัตถุประสงค์ของเส้นทางขั้นสูงเพิ่มเติม เช่น เส้นทางที่เป็นมิตรต่อสิ่งแวดล้อมหรือเส้นทางที่สั้นที่สุด

วิธีการทำงานของโทเค็นเส้นทาง

คุณสามารถใช้ Routes API หรือ Route Optimization API เพื่อวางแผนเส้นทางโดยใช้วัตถุประสงค์ของเส้นทาง คุณสามารถส่งโทเค็นเส้นทางที่แสดงผลจาก API เหล่านี้ไปยัง Navigation SDK เพื่อเป็นแนวทางในการกำหนดเส้นทางของยานพาหนะได้

สิ่งที่จะเกิดขึ้นเมื่อคุณขอและใช้โทเค็นเส้นทางมีดังนี้

  1. Routes API หรือ Route Optimization API จะแสดงผลโทเค็นเส้นทางที่เข้ารหัสซึ่งมีเส้นประกอบของเส้นทางและวัตถุประสงค์ของเส้นทาง

  2. คุณส่งโทเค็นเส้นทางไปยัง Navigation SDK

  3. Navigation SDK จะเริ่มการนำทางในเส้นทางที่วางแผนไว้ แม้ว่าจะมีเส้นทางที่เร็วกว่าก็ตาม

  4. ในระหว่างการเดินทาง หากสภาพการจราจรหรือสภาพถนนเปลี่ยนแปลง หรือหากยานพาหนะออกนอกเส้นทางที่วางแผนไว้ Navigation SDK จะคำนวณเส้นทางใหม่ตามวัตถุประสงค์ของเส้นทางและตัวเลือกการกำหนดเส้นทางที่ตั้งค่าไว้ในโทเค็นเส้นทาง

กระบวนการนี้จะช่วยให้เส้นทางจริงใกล้เคียงกับเส้นทางที่วางแผนไว้มากที่สุด

สาเหตุที่ระบบอาจไม่ปฏิบัติตามเส้นทางที่วางแผนไว้อย่างเคร่งครัด

การนำทางจะเริ่มต้นในเส้นทางที่วางแผนไว้ แต่เส้นทางจริงอาจแตกต่างจากเส้นทางดังกล่าวในสถานการณ์ต่อไปนี้

  • ยานพาหนะเริ่มออกเดินทางจากจุดเริ่มต้นที่วางแผนไว้
  • สภาพการจราจรหรือสภาพถนนเปลี่ยนแปลงระหว่างการเดินทาง
  • ยานพาหนะออกจากเส้นทางที่วางแผนไว้

ความแตกต่างเหล่านี้อาจส่งผลต่อระยะทาง, ETA และคุณภาพการเดินทางที่สำคัญอื่นๆ ที่คุณวางแผนไว้

วางแผนเส้นทางโดยใช้โทเค็นเส้นทาง

คุณวางแผนเส้นทางได้โดยสร้างโทเค็นเส้นทางแล้วส่งไปยัง Navigation SDK ตามที่อธิบายไว้ในขั้นตอนต่อไปนี้

ขั้นตอนที่ 1: สร้างโทเค็นเส้นทางโดยใช้ Routes API หรือ Route Optimization API

  1. ขอโทเค็นเส้นทางด้วยวิธีใดวิธีหนึ่งต่อไปนี้

  2. ตั้งค่าคำขอ Routes API ให้เป็นไปตามข้อกำหนดสำหรับการใช้โทเค็นเส้นทาง ดังนี้

    • ตั้งค่า travelMode เป็น DRIVE หรือ TWO_WHEELER
    • ตั้งค่า routingPreference เป็น TRAFFIC_AWARE หรือ TRAFFIC_AWARE_OPTIMAL
    • อย่าใช้จุดอ้างอิง Via จุด

ขั้นตอนที่ 2: ส่งโทเค็นเส้นทางไปยัง Navigation SDK

  1. จัดเก็บโทเค็นเส้นทาง: ใน Navigation SDK ให้ตั้งค่าสตริงเพื่อจัดเก็บโทเค็นเส้นทาง เช่น

    String routeToken = "route token returned by Routes API";
    

    ตัวอย่างโทเค็นเส้นทางที่แสดงผล

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. ส่งโทเค็นเส้นทางไปยัง Navigation SDK โดยใช้เมธอด Navigator.setDestinationsWithToken Navigation SDK จะรับจุดหมายและตัวเลือกการกำหนดเส้นทางจากโทเค็นเส้นทาง คุณจึงไม่จำเป็นต้องส่งจุดอ้างอิงหรือโหมดการเดินทาง

    setDestinationsWithToken(String routeToken, RouteDescriptionLoadCallback callback);
    setDestinationsWithToken(String routeToken, DisplayOptions displayOptions, RouteDescriptionLoadCallback callback);
    

  3. ตรวจสอบสถานะเส้นทางใน Callback เมื่อ Navigation SDK คำนวณเส้นทางเสร็จแล้ว ระบบจะส่ง RouteDescription ไปยัง Callback ของคุณ หากพบเส้นทางจากตำแหน่งของยานพาหนะไปยังจุดหมายในโทเค็นเส้นทาง RouteDescription.getRouteStatus จะแสดงผล Navigator.RouteStatus.OK และคุณจะเริ่มการนำทางได้ เช่น

    navigator.setDestinationsWithToken(
        routeToken,
        routeDescription -> {
          if (routeDescription.getRouteStatus() == Navigator.RouteStatus.OK) {
            navigator.startGuidance();
          }
        });
    

ตรวจสอบว่า Navigation SDK ใช้โทเค็นเส้นทางของคุณหรือไม่

สถานะเส้นทาง OK หมายความว่า Navigation SDK พบเส้นทาง แต่ไม่จำเป็นต้องเป็นเส้นทางที่คุณวางแผนไว้ หากต้องการตรวจสอบว่าเส้นทางตรงกับเส้นทางที่วางแผนไว้หรือไม่ ให้ทำตามขั้นตอนต่อไปนี้ใน Callback

  1. ยืนยันว่า RouteDescription.getRouteStatus แสดงผลเป็น Navigator.RouteStatus.OK Navigation SDK จะให้รายละเอียดโทเค็นเส้นทางเมื่อพบเส้นทางเท่านั้น ดูข้อมูลเพิ่มเติมได้ที่ขั้นตอนที่ 2

  2. เรียก RouteDescription.getRouteTokenExecutionDetails เพื่อรับออบเจ็กต์ RouteTokenExecutionDetails หากเซิร์ฟเวอร์ไม่ระบุรายละเอียดโทเค็นเส้นทาง เมธอดนี้จะแสดงผลเป็น null

  3. เรียก getTokenExecutionStatus ในออบเจ็กต์ RouteTokenExecutionDetails หากแสดงผลเป็น TOKEN_SUCCESSFULLY_APPLIED แสดงว่าเส้นทางตรงกับเส้นทางที่วางแผนไว้ สถานะอื่นๆ หมายความว่าเส้นทางอาจแตกต่างจากเส้นทางที่คุณวางแผนไว้ ดูข้อมูลเพิ่มเติมเกี่ยวกับแต่ละสถานะได้ที่ค่าสถานะการดำเนินการของโทเค็น

  4. ไม่บังคับ: หากสถานะเป็น TOKEN_SUCCESSFULLY_APPLIED ให้เรียกใช้ getResolvedParameters ในออบเจ็กต์ RouteTokenExecutionDetails เดียวกันเพื่อตรวจสอบตัวเลือกการกำหนดเส้นทางที่เส้นทางใช้ เช่น หลีกเลี่ยงค่าผ่านทางหรือไม่ ดูข้อมูลเพิ่มเติมได้ที่หัวข้อตัวเลือกการกำหนดเส้นทางที่ได้รับการแก้ไข

ค่าสถานะการดำเนินการของโทเค็น

หากสถานะเส้นทางคือ OK คุณจะเริ่มการแนะนำเส้นทางได้ด้วยสถานะการดำเนินการโทเค็นใดก็ได้ สถานะจะบอกให้ทราบว่าเส้นทางเป็นไปตามเส้นทางที่วางแผนไว้หรือไม่

สถานะ ตามเส้นทางที่วางแผนไว้ คำอธิบาย
TOKEN_SUCCESSFULLY_APPLIED ใช่ Navigation SDK ใช้โทเค็นเส้นทางของคุณแล้ว
TOKEN_APPLIED_WITH_LOCATION_MISMATCH ไม่จำเป็นเสมอไป Navigation SDK ไม่สามารถสร้างเส้นทางที่วางแผนไว้ใหม่ได้เนื่องจากตำแหน่งในคำขอเส้นทางอยู่ห่างจากตำแหน่งที่ตรงกันในโทเค็นเส้นทางมากกว่า 25 เมตร สำหรับ setDestinationsWithToken หมายความว่าอุปกรณ์อยู่ห่างจากจุดเริ่มต้นในโทเค็นเส้นทางมากกว่า 25 เมตร เส้นทางจะยังคงไปยังจุดหมายของคุณ แต่ Navigation SDK ไม่สามารถยืนยันได้ว่าเส้นทางดังกล่าวใช้ตัวเลือกการกำหนดเส้นทางจากโทเค็นเส้นทาง เช่น การหลีกเลี่ยงค่าผ่านทาง
TOKEN_IGNORED_OTHER ไม่จำเป็นเสมอไป Navigation SDK ไม่สามารถสร้างเส้นทางที่วางแผนไว้อีกครั้งเนื่องจากสาเหตุอื่น เช่น ถนนในเส้นทางที่วางแผนไว้ปิดอยู่ เส้นทางจะยังคงไปยังจุดหมายของคุณ แต่ Navigation SDK ไม่สามารถยืนยันได้ว่าเส้นทางดังกล่าวใช้ตัวเลือกการกำหนดเส้นทางจากโทเค็นเส้นทาง เช่น การหลีกเลี่ยงค่าผ่านทาง
NO_TOKEN_PROVIDED ไม่เกี่ยวข้อง คำขอเส้นทางไม่มีโทเค็นเส้นทาง
UNKNOWN ไม่ทราบ ไม่ทราบสถานะ

หากเส้นทางไม่จำเป็นต้องเป็นไปตามเส้นทางที่วางแผนไว้และเส้นทางที่แน่นอนมีความสำคัญ เช่น เนื่องจากคุณใช้เส้นทางดังกล่าวในการคำนวณราคา ให้บันทึกสถานะหรือขอโทเค็นเส้นทางใหม่จากตำแหน่งปัจจุบันของยานพาหนะ

ตัวเลือกการกำหนดเส้นทางที่แก้ไขแล้ว

getResolvedParameters จะแสดงผลออบเจ็กต์ RouteTokenResolvedParameters หรือ null หากตัวเลือกการกำหนดเส้นทางไม่พร้อมใช้งาน RouteTokenResolvedParameters มีวิธีการดังต่อไปนี้

  • getTravelMode: โหมดการเดินทางที่เส้นทางใช้ เช่น RoutingOptions.TravelMode.DRIVING นอกจากนี้ Navigation SDK ยังรายงาน RoutingOptions.TravelMode.DRIVING เมื่อเส้นทางใช้โหมดการเดินทางที่ไม่มีค่าที่ตรงกัน หรือเมื่อโหมดการเดินทางไม่พร้อมใช้งาน
  • getAvoidTolls: เส้นทางเลี่ยงค่าผ่านทางหรือไม่
  • getAvoidHighways: เส้นทางเลี่ยงทางหลวงหรือไม่
  • getAvoidFerries: เส้นทางเลี่ยงเรือข้ามฟากหรือไม่

ตัวอย่าง

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีวางแผนเส้นทางโดยใช้โทเค็นเส้นทาง ตรวจสอบว่า Navigation SDK ใช้โทเค็นหรือไม่ และเริ่มการนำทาง

String routeToken = "route token returned by Routes API";

// Existing flow to get a Navigator.
NavigationApi.getNavigator(...);

// Handle the result of the route calculation.
RouteDescriptionLoadCallback callback =
    routeDescription -> {
      // Check whether the Navigation SDK found a route.
      if (routeDescription.getRouteStatus() != Navigator.RouteStatus.OK) {
        Log.w(TAG, "Route status: " + routeDescription.getRouteStatus());
        return;
      }

      // Check whether the Navigation SDK applied the route token.
      RouteTokenExecutionDetails executionDetails =
          routeDescription.getRouteTokenExecutionDetails();
      if (executionDetails == null) {
        Log.i(TAG, "Route token details aren't available.");
      } else if (executionDetails.getTokenExecutionStatus()
          != RouteTokenExecutionDetails.TokenExecutionStatus.TOKEN_SUCCESSFULLY_APPLIED) {
        Log.w(TAG, "The route might differ from your planned route.");
      }

      navigator.startGuidance();
    };

// Set destinations using the route token.
navigator.setDestinationsWithToken(routeToken, callback);

// Or with display options.
DisplayOptions displayOptions = new DisplayOptions();
navigator.setDestinationsWithToken(routeToken, displayOptions, callback);

วิธีที่โทเค็นเส้นทางและ Navigation SDK โต้ตอบกัน

Navigation SDK จะจัดการเส้นทางที่วางแผนไว้ดังนี้

  • ใช้ตัวเลือกการกำหนดเส้นทางที่ตั้งค่าไว้ในโทเค็นเส้นทางแทนการตั้งค่าต่อไปนี้ในแอป รวมถึงเมื่อคำนวณเส้นทางใหม่ระหว่างการเดินทาง

    • RoutingOptions.avoidHighways
    • RoutingOptions.avoidTolls
    • RoutingOptions.avoidFerries
    • Navigator.setLicensePlateRestrictionInfo
    • โหมดการเดินทางที่ตั้งค่าไว้ในแอป
  • ทำตามการตั้งค่าต่อไปนี้เมื่อคำนวณหรือปรับเส้นทาง

    • วัตถุประสงค์ของเส้นทางจากโทเค็นเส้นทาง เช่น เส้นทางที่เป็นมิตรต่อสิ่งแวดล้อมหรือเส้นทางที่สั้นที่สุด หาก Navigation SDK ต้องปรับเส้นทาง ระบบจะใช้วัตถุประสงค์ของเส้นทางที่คุณระบุไว้เมื่อขอโทเค็นเส้นทาง
    • ตัวเลือกที่เกี่ยวข้องกับจุดอ้างอิงจากโทเค็นเส้นทาง เช่น ค่ากำหนดฝั่งถนน