บางครั้งคุณอาจต้องการวางแผนเส้นทางที่แอปจะแสดงให้ผู้ใช้เห็น การใช้โทเค็นเส้นทางจาก Routes API, Routes Preferred API หรือ Route Optimization API จะช่วยคุณระบุ 2 สิ่งสำหรับเส้นทางที่วางแผนไว้ได้ ดังนี้
เส้นประกอบสำหรับเส้นทาง
วัตถุประสงค์ของเส้นทาง
ตัวอย่างวัตถุประสงค์ในการกำหนดเส้นทางที่คุณอาจมี ได้แก่
ลดเวลาในการนำส่ง: ธุรกิจที่นำส่งอาหารอาจต้องการลดเวลาที่ใช้ในการนำส่งอาหาร
ลดระยะเวลาเดินทางหรือการใช้เชื้อเพลิง: ธุรกิจโลจิสติกส์อาจต้องการปรับปรุงประสิทธิภาพของคนขับและลดต้นทุนเชื้อเพลิง
ลดเวลาในการเดินทางไปยังจุดหมาย: การดำเนินการจัดส่งบริการอาจต้องการลดเวลาที่ใช้ในการส่งผู้ปฏิบัติงานไปยังคำของาน
ลดค่าใช้จ่ายและเพิ่มความปลอดภัย: ธุรกิจบริการร่วมเดินทางอาจต้องการค้นหาเส้นทางที่มีค่าใช้จ่ายน้อยลงสำหรับผู้ขับขี่และหลีกเลี่ยงบางพื้นที่เพื่อความปลอดภัย
ดูข้อมูลเพิ่มเติมเกี่ยวกับการวางแผนเส้นทางโดยใช้โทเค็นเส้นทางได้ที่หัวข้อรับโทเค็นเส้นทางใน Routes API และเปลี่ยนผ่านเส้นประกอบและโทเค็นเส้นทางใน Route Optimization API
เหตุผลที่ควรใช้โทเค็นเส้นทางสำหรับวัตถุประสงค์ของเส้นทาง
โทเค็นเส้นทางจาก Routes API, Routes Preferred API หรือ Route Optimization API ช่วยให้คุณควบคุมเส้นทางที่ระบุได้มากขึ้น ดังนี้
วางแผนเส้นทางล่วงหน้าเพื่อให้ Navigation SDK ใช้
เลือกเส้นทางที่ดีที่สุดสำหรับ Navigation SDK เพื่อใช้งาน หากคุณขอโทเค็นเส้นทางเมื่อสร้างเส้นทางใน Routes API คุณจะได้รับโทเค็นเส้นทางสำหรับแต่ละเส้นทางที่สร้างขึ้น จากนั้นคุณสามารถเลือกโทเค็นสำหรับเส้นทางที่ต้องการใช้เมื่อส่งไปยัง Navigation SDK
ประเมินราคาล่วงหน้า รวมถึงการประเมินเวลาถึงโดยประมาณและระยะทาง แม้ว่าค่าใช้จ่ายและเวลาจริงอาจแตกต่างกันไป แต่การประมาณนี้จะช่วยลดช่องว่างระหว่างค่าใช้จ่ายของเส้นทางที่คาดไว้กับค่าใช้จ่ายจริง
ระบุวัตถุประสงค์ของเส้นทางขั้นสูงเพิ่มเติม เช่น เส้นทางที่เป็นมิตรต่อสิ่งแวดล้อมหรือเส้นทางที่สั้นที่สุด
วิธีการทำงานของโทเค็นเส้นทาง
คุณสามารถใช้ Routes API, Routes Preferred API หรือ Route Optimization API เพื่อวางแผนเส้นทางโดยใช้วัตถุประสงค์ของเส้นทาง คุณสามารถส่งโทเค็นเส้นทางที่แสดงผลจาก API เหล่านี้ไปยัง Navigation SDK เพื่อเป็นแนวทางในการกำหนดเส้นทางของยานพาหนะ
สิ่งที่จะเกิดขึ้นเมื่อคุณขอและใช้โทเค็นเส้นทางมีดังนี้
Routes API, Routes Preferred API หรือ Route Optimization API จะแสดงผลโทเค็นเส้นทางที่เข้ารหัสซึ่งมีเส้นประกอบของเส้นทางและวัตถุประสงค์ของเส้นทาง
คุณส่งโทเค็นเส้นทางไปยัง Navigation SDK
Navigation SDK จะเริ่มการนำทางในเส้นทางที่วางแผนไว้ แม้ว่าจะมีเส้นทางที่เร็วกว่าก็ตาม
ในระหว่างการเดินทาง หากสภาพการจราจรหรือสภาพถนนเปลี่ยนแปลง หรือหากยานพาหนะออกนอกเส้นทางที่วางแผนไว้ Navigation SDK จะคำนวณเส้นทางใหม่ตามวัตถุประสงค์ของเส้นทางและตัวเลือกการกำหนดเส้นทางที่ตั้งค่าไว้ในโทเค็นเส้นทาง
กระบวนการนี้จะช่วยให้เส้นทางจริงใกล้เคียงกับเส้นทางที่วางแผนไว้มากที่สุด
สาเหตุที่ระบบอาจไม่ปฏิบัติตามเส้นทางที่วางแผนไว้อย่างเคร่งครัด
การนำทางจะเริ่มต้นในเส้นทางที่วางแผนไว้ แต่เส้นทางจริงอาจแตกต่างจากเส้นทางดังกล่าวในสถานการณ์ต่อไปนี้
- ยานพาหนะเริ่มออกเดินทางจากจุดเริ่มต้นที่วางแผนไว้
- สภาพการจราจรหรือสภาพถนนเปลี่ยนแปลงระหว่างการเดินทาง
- ยานพาหนะออกจากเส้นทางที่วางแผนไว้
ความแตกต่างเหล่านี้อาจส่งผลต่อระยะทาง, ETA และคุณภาพการเดินทางที่สำคัญอื่นๆ ที่คุณวางแผนไว้
วางแผนเส้นทางโดยใช้โทเค็นเส้นทาง
คุณวางแผนเส้นทางได้โดยสร้างโทเค็นเส้นทางแล้วส่งไปยัง Navigation SDK ตามที่อธิบายไว้ในขั้นตอนต่อไปนี้
ขั้นตอนที่ 1: สร้างโทเค็นเส้นทางโดยใช้ Routes API, Routes Preferred API หรือ Route Optimization API
ขอโทเค็นเส้นทางด้วยวิธีใดวิธีหนึ่งต่อไปนี้
Routes API:
computeRoutesดูข้อมูลเพิ่มเติมเกี่ยวกับการขอโทเค็นเส้นทางใน Routes API ได้ที่คำนวณเส้นทางและรับโทเค็นเส้นทางRoutes Preferred API:
computeCustomRoutesดูข้อมูลเพิ่มเติมเกี่ยวกับการขอโทเค็นเส้นทางใน Routes Preferred API ได้ที่วางแผนเส้นทางRoute Optimization API:
optimizeToursหรือbatchOptimizeToursดูข้อมูลเพิ่มเติมเกี่ยวกับการขอโทเค็นเส้นทางใน Route Optimization API ได้ที่เส้นประกอบการเปลี่ยนผ่านและโทเค็นเส้นทาง
ตั้งค่าคำขอ Routes API หรือ Routes Preferred API ให้เป็นไปตามข้อกำหนดสำหรับการใช้โทเค็นเส้นทาง ดังนี้
- ตั้งค่า
travelModeเป็นDRIVEหรือTWO_WHEELER - ตั้งค่า
routingPreferenceเป็นTRAFFIC_AWAREหรือTRAFFIC_AWARE_OPTIMAL - อย่าใช้จุดอ้างอิง
Viaจุด
- ตั้งค่า
ขั้นตอนที่ 2: ส่งโทเค็นเส้นทางไปยัง Navigation SDK
จัดเก็บโทเค็นเส้นทาง: ใน Navigation SDK ให้ตั้งค่าสตริงเพื่อจัดเก็บโทเค็นเส้นทาง เช่น
let routeToken = "route token returned by Routes API"ตัวอย่างโทเค็นเส้นทางที่แสดงผล
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }ส่งโทเค็นเส้นทางไปยัง Navigation SDK โดยใช้เมธอด
setDestinationsWithToken:completionHandler:ของmapView.navigatorNavigation SDK จะรับจุดหมายและตัวเลือกการกำหนดเส้นทางจากโทเค็นเส้นทาง คุณจึงไม่จำเป็นต้องส่งจุดอ้างอิงโหมดการเดินทางที่ตั้งค่าไว้ในแอป เช่น
mapView.travelModeต้องเป็นค่าใดค่าหนึ่งต่อไปนี้.driving(GMSNavigationTravelModeDriving): การขับขี่ ค่านี้เป็นค่าเริ่มต้น ดังนั้นแอปส่วนใหญ่จึงไม่จำเป็นต้องเปลี่ยนแปลง.twoWheeler(GMSNavigationTravelModeTwoWheeler): มอเตอร์ไซค์
โหมดการเดินทางอื่นๆ จะทำให้คำขอล้มเหลวพร้อมข้อผิดพลาด
.travelModeUnsupported(GMSRouteStatusTravelModeUnsupported) เมื่อใช้ค่าที่รองรับอย่างใดอย่างหนึ่ง เส้นทางจะใช้โหมดการเดินทางในโทเค็นเส้นทาง เช่น หากแอปใช้การขับขี่และโทเค็นเส้นทางของคุณมีไว้สำหรับเส้นทางรถ 2 ล้อ Navigation SDK จะแสดงเส้นทางรถ 2 ล้อ หากต้องการยืนยันว่าเส้นทางใช้โหมดการเดินทางใด ให้ตรวจสอบresolvedParameters.travelModeดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกการกำหนดเส้นทางที่ได้รับการแก้ไขตรวจสอบสถานะเส้นทางในเครื่องจัดการการดำเนินการเสร็จสมบูรณ์ เมื่อ Navigation SDK คำนวณเส้นทางเสร็จแล้ว ระบบจะส่ง
GMSNavigationRouteDescriptionไปยังแฮนเดิลการดำเนินการเสร็จสมบูรณ์ หากพบเส้นทางจากตำแหน่งของยานพาหนะไปยังจุดหมายในโทเค็นเส้นทางrouteStatusของคำอธิบายเส้นทางจะเป็น.OK(GMSRouteStatusOK) และคุณจะเริ่มการนำทางได้ ไม่เช่นนั้น ตัวแฮนเดิลการดำเนินการเสร็จสมบูรณ์จะได้รับNSErrorที่อธิบายความล้มเหลวด้วย เช่นmapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in if routeDescription?.routeStatus == .OK { self?.mapView.navigator?.isGuidanceActive = true } }
ตรวจสอบว่า Navigation SDK ใช้โทเค็นเส้นทางของคุณหรือไม่
สถานะเส้นทาง .OK หมายความว่า Navigation SDK พบเส้นทาง แต่ไม่จำเป็นต้องเป็นเส้นทางที่คุณวางแผนไว้ หากต้องการตรวจสอบว่าเส้นทางตรงกับเส้นทางที่วางแผนไว้หรือไม่ ให้ทำตามขั้นตอนต่อไปนี้ในเครื่องจัดการการดำเนินการเสร็จสมบูรณ์
ยืนยันว่า
routeStatusของคำอธิบายเส้นทางคือ.OKNavigation SDK จะให้รายละเอียดโทเค็นเส้นทางเมื่อพบเส้นทางเท่านั้น ดูข้อมูลเพิ่มเติมได้ที่ขั้นตอนที่ 2รับ
routeTokenExecutionDetailsของคำอธิบายเส้นทาง ซึ่งเป็นออบเจ็กต์ที่สอดคล้องกับโปรโตคอลGMSNavigationRouteTokenExecutionDetailsหากเซิร์ฟเวอร์ไม่ได้ระบุรายละเอียดโทเค็นเส้นทาง พร็อพเพอร์ตี้นี้จะเป็นnilตรวจสอบพร็อพเพอร์ตี้
tokenExecutionStatusของรายละเอียดการดำเนินการ หากเป็น.tokenSuccessfullyAppliedแสดงว่าเส้นทางตรงกับเส้นทางที่คุณวางแผนไว้ สถานะอื่นๆ หมายความว่าเส้นทางอาจแตกต่างจากเส้นทางที่คุณวางแผนไว้ ดูข้อมูลเพิ่มเติมเกี่ยวกับแต่ละสถานะได้ที่ค่าสถานะการดำเนินการของโทเค็นไม่บังคับ: หากสถานะเป็น
.tokenSuccessfullyAppliedให้ตรวจสอบพร็อพเพอร์ตี้resolvedParametersของรายละเอียดการดำเนินการเดียวกันเพื่อดูว่าเส้นทางใช้ตัวเลือกการกำหนดเส้นทางใด เช่น หลีกเลี่ยงค่าผ่านทางหรือไม่ ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกการกำหนดเส้นทางที่ได้รับการแก้ไข
ค่าสถานะการดำเนินการของโทเค็น
หาก routeStatus เป็น .OK คุณสามารถเริ่มคำแนะนำด้วยสถานะการดำเนินการโทเค็นใดก็ได้ สถานะจะบอกให้ทราบว่าเส้นทางเป็นไปตามเส้นทางที่วางแผนไว้หรือไม่
| สถานะ | ตามเส้นทางที่วางแผนไว้ | คำอธิบาย |
|---|---|---|
.tokenSuccessfullyApplied |
ใช่ | Navigation SDK ใช้โทเค็นเส้นทางของคุณแล้ว |
.tokenAppliedWithLocationMismatch |
ไม่จำเป็นเสมอไป | Navigation SDK ไม่สามารถสร้างเส้นทางที่วางแผนไว้ใหม่ และอุปกรณ์อยู่ห่างจากจุดเริ่มต้นในโทเค็นเส้นทางมากกว่า 25 เมตร เส้นทางจะยังคงใช้จุดหมายและตัวเลือกการกำหนดเส้นทางจากโทเค็นเส้นทางของคุณ |
.tokenIgnoredOther |
ไม่จำเป็นเสมอไป | Navigation SDK ไม่สามารถสร้างเส้นทางที่วางแผนไว้อีกครั้งเนื่องจากสาเหตุอื่น เช่น ถนนในเส้นทางที่วางแผนไว้ปิดอยู่ เส้นทางจะยังคงใช้จุดหมายและตัวเลือกการกำหนดเส้นทางจากโทเค็นเส้นทางของคุณ |
.noTokenProvided |
ไม่เกี่ยวข้อง | คำขอเส้นทางไม่มีโทเค็นเส้นทาง |
.unknown |
ไม่ทราบ | ไม่ทราบสถานะ |
หากเส้นทางไม่จำเป็นต้องเป็นไปตามเส้นทางที่วางแผนไว้และเส้นทางที่แน่นอนมีความสำคัญ เช่น เนื่องจากคุณใช้เส้นทางดังกล่าวในการคำนวณราคา ให้บันทึกสถานะหรือขอโทเค็นเส้นทางใหม่จากตำแหน่งปัจจุบันของยานพาหนะ
ตัวเลือกการกำหนดเส้นทางที่แก้ไขแล้ว
resolvedParameters คือออบเจ็กต์ที่สอดคล้องกับโปรโตคอล GMSNavigationRouteTokenResolvedParameters หรือ nil หากตัวเลือกการกำหนดเส้นทางไม่พร้อมใช้งาน โดยมีพร็อพเพอร์ตี้ต่อไปนี้
travelMode: รูปแบบการเดินทางที่เส้นทางใช้ เช่น.driving(GMSNavigationTravelModeDriving) นอกจากนี้ Navigation SDK ยังรายงาน.drivingเมื่อเส้นทางใช้รูปแบบการเดินทางที่ไม่มีค่าที่ตรงกัน หรือเมื่อรูปแบบการเดินทางไม่พร้อมใช้งานavoidTolls: เส้นทางเลี่ยงค่าผ่านทางหรือไม่avoidHighways: เส้นทางเลี่ยงทางหลวงหรือไม่avoidFerries: เส้นทางเลี่ยงเรือข้ามฟากหรือไม่avoidTunnels: มีการคำนวณเส้นทางเพื่อหลีกเลี่ยงอุโมงค์เมื่อเป็นไปได้หรือไม่avoidVignettes: ประเทศที่มีการคำนวณเส้นทางเพื่อหลีกเลี่ยงสติกเกอร์ค่าผ่านทางเมื่อเป็นไปได้ โดยใช้รหัสภูมิภาค 2 ตัวอักษรของ Unicode CLDR เช่นCHสำหรับสวิตเซอร์แลนด์rerouteStrategy: กลยุทธ์ที่แบ็กเอนด์การกำหนดเส้นทางใช้เพื่อคำนวณเส้นทางใหม่ระหว่างการเดินทาง กลยุทธ์ต่างๆ ได้แก่.bestBasedOnTokenParameters(GMSNavigationRerouteStrategyBestBasedOnTokenParameters) ซึ่งใช้พารามิเตอร์การกำหนดเส้นทางในโทเค็นเส้นทางเพื่อคำนวณเส้นทางใหม่
หากสถานะการดำเนินการของโทเค็นไม่ใช่ .tokenSuccessfullyApplied Navigation SDK จะรายงานเฉพาะ travelMode, avoidTolls, avoidHighways และ avoidFerries พร็อพเพอร์ตี้อื่นๆ มีค่าเริ่มต้น แม้ว่าคุณจะขอให้หลีกเลี่ยงอุโมงค์หรือสติกเกอร์ทางด่วนเมื่อขอโทเค็นเส้นทางก็ตาม โดย avoidTunnels คือ false (NO), avoidVignettes ว่างเปล่า และ rerouteStrategy คือ .unknown (GMSNavigationRerouteStrategyUnknown)
ตัวอย่าง
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีวางแผนเส้นทางโดยใช้โทเค็นเส้นทาง ตรวจสอบว่า Navigation SDK ใช้โทเค็นหรือไม่ และเริ่มการนำทาง
Swift
let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in
// Check whether the Navigation SDK found a route.
guard routeDescription?.routeStatus == .OK else {
print("Route error: \(error?.localizedDescription ?? "unknown")")
return
}
// Check whether the Navigation SDK applied the route token.
if let executionDetails = routeDescription?.routeTokenExecutionDetails {
if executionDetails.tokenExecutionStatus != .tokenSuccessfullyApplied {
print("The route might differ from your planned route.")
}
} else {
print("Route token details aren't available.")
}
self?.mapView.navigator?.isGuidanceActive = true
}
Objective-C
NSString *routeToken = @"route token returned by Routes API";
[mapView.navigator setDestinationsWithToken:routeToken
completionHandler:^(id<GMSNavigationRouteDescription> _Nullable routeDescription,
NSError *_Nullable error) {
// Check whether the Navigation SDK found a route.
if (routeDescription.routeStatus != GMSRouteStatusOK) {
NSLog(@"Route error: %@", error.localizedDescription);
return;
}
// Check whether the Navigation SDK applied the route token.
id<GMSNavigationRouteTokenExecutionDetails> executionDetails =
routeDescription.routeTokenExecutionDetails;
if (executionDetails == nil) {
NSLog(@"Route token details aren't available.");
} else if (executionDetails.tokenExecutionStatus !=
GMSNavigationRouteTokenExecutionStatusTokenSuccessfullyApplied) {
NSLog(@"The route might differ from your planned route.");
}
mapView.navigator.guidanceActive = YES;
}];
สถานการณ์ที่มีจุดแวะพักหลายจุด
คุณกำหนดค่าจุดอ้างอิงได้สูงสุด 25 จุด
Navigation SDK จะไม่ไปยังจุดหมายถัดไปโดยอัตโนมัติ เมื่อยานพาหนะมาถึงจุดอ้างอิง ให้เรียกใช้
continueToNextDestinationWithCompletion:
เพื่อเริ่มการเดินทางช่วงถัดไป นอกจากนี้ยังใช้กับโทเค็นเส้นทางที่มีจุดอ้างอิงระดับกลางด้วย เมื่อคุณไปยังจุดหมายถัดไป Navigation SDK จะยังคงติดตามเส้นทางจากโทเค็นเส้นทางแทนที่จะวางแผนเส้นทางใหม่
วิธีที่โทเค็นเส้นทางและ Navigation SDK โต้ตอบกัน
Navigation SDK จะจัดการเส้นทางที่วางแผนไว้ดังนี้
ลบล้างปลายทางที่ตั้งค่าไว้ก่อนหน้านี้
ใช้ตำแหน่งเริ่มต้นของรถ
ปรับเปลี่ยนตามสภาพถนนและสภาพการจราจร ดูสาเหตุที่อาจไม่สามารถปฏิบัติตามเส้นทางที่วางแผนไว้ได้อย่างสมบูรณ์
ใช้ตัวเลือกการกำหนดเส้นทางที่ตั้งค่าไว้ในโทเค็นเส้นทางแทนการตั้งค่าต่อไปนี้ในแอป รวมถึงเมื่อคำนวณเส้นทางใหม่ระหว่างการเดินทาง
avoidsHighwaysavoidsTollsavoidsFerrieslicensePlateRestriction- โหมดการเดินทางที่ตั้งค่าไว้ในแอป
ทำตามการตั้งค่าต่อไปนี้เมื่อคำนวณหรือปรับเส้นทาง
- วัตถุประสงค์ของเส้นทางจากโทเค็นเส้นทาง เช่น เส้นทางที่เป็นมิตรต่อสิ่งแวดล้อมหรือเส้นทางที่สั้นที่สุด หาก Navigation SDK ต้องปรับเส้นทาง ระบบจะใช้วัตถุประสงค์ของเส้นทางที่คุณระบุไว้เมื่อขอโทเค็นเส้นทาง
- ตัวเลือกที่เกี่ยวข้องกับจุดอ้างอิงจากโทเค็นเส้นทาง เช่น ค่ากำหนดฝั่งถนน