เส้นทางของยานพาหนะสามารถแยกวิเคราะห์ตามแกนเวลาได้ดังนี้ (สมมติว่ามีการแวะ n ครั้ง)
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
โปรดทราบว่าเราสร้างความแตกต่างระหว่าง
- "เหตุการณ์ตามเวลา" เช่น จุดเริ่มต้นและจุดสิ้นสุดของยานพาหนะ รวมถึงจุดเริ่มต้นและจุดสิ้นสุดของการเข้าชมแต่ละครั้ง (หรือที่เรียกว่าการมาถึงและออกเดินทาง) เหตุการณ์เหล่านี้เกิดขึ้นในวินาทีหนึ่งๆ
- "ช่วงเวลา" เช่น การเข้าชม และการเปลี่ยนระหว่างการเข้าชม แม้ว่าบางครั้งช่วงเวลาอาจมีระยะเวลาเป็นศูนย์ เช่น เริ่มต้นและสิ้นสุดในวินาทีเดียวกัน แต่ช่วงเวลาดังกล่าวมักจะมีระยะเวลาเป็นบวก
ตัวแปร:
- หากมีการเข้าชม n ครั้ง จะมี การเปลี่ยน n+1
- การเข้าชมจะล้อมรอบด้วยการเปลี่ยนผ่านก่อน (ดัชนีเดียวกัน) และการเปลี่ยนตามหลัง (ดัชนี + 1) เสมอ
- สตาร์ทรถจะตามด้วยการเปลี่ยนที่ 0 เสมอ
- ส่วน "สิ้นสุดยานพาหนะ" จะมีการเปลี่ยน #n นำหน้าเสมอ
เมื่อซูมเข้า สิ่งที่จะเกิดขึ้นระหว่าง Transition
และ Visit
มีดังนี้
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
สุดท้ายนี้ คุณสามารถจัดเตรียม TRAVEL, BREAKS, DELAY และ WAIT ระหว่างการเปลี่ยนผ่านนี้
- โดยจะไม่ซ้อนทับกัน
- DELAY จะต้องไม่ซ้ำกันและต้องเป็นระยะเวลาติดต่อกันก่อนการเข้าชมครั้งถัดไป (หรือจุดสิ้นสุดของยานพาหนะ) ดังนั้น คุณก็ทราบเวลาเริ่มต้นและเวลาสิ้นสุดได้จากการทราบระยะเวลาการเลื่อน
- BREAKS เป็นช่วงเวลาต่อเนื่องและไม่ซ้อนทับกัน การตอบสนองจะระบุเวลาเริ่มต้นและระยะเวลาของช่วงพักแต่ละช่วง
- TRAVEL และ WAIT จะ "ล่วงหน้า" โดยอาจมีการหยุดชะงักหลายครั้งในช่วงการเปลี่ยนผ่านนี้ ลูกค้าจะถือว่าการเดินทางเกิดขึ้น "โดยเร็วที่สุด" และ "รอ" จะแสดงเวลาที่เหลือ
ตัวอย่าง (ที่ซับซ้อน)
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
การแสดง JSON |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
ช่อง | |
---|---|
vehicleIndex |
ยานพาหนะที่ใช้เส้นทางซึ่งระบุโดยดัชนีในแหล่งที่มา |
vehicleLabel |
ป้ายกํากับของยานพาหนะที่วิ่งเส้นทางนี้ ซึ่งเท่ากับ |
vehicleStartTime |
เวลารถเริ่มออกเดินทาง การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขเศษส่วนสูงสุด 9 หลัก ตัวอย่าง: |
vehicleEndTime |
เวลาที่รถวิ่งจนเสร็จสิ้น การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขเศษส่วนสูงสุด 9 หลัก ตัวอย่าง: |
visits[] |
ลําดับการเข้าชมตามลําดับที่แสดงถึงเส้นทาง โดย visits[i] คือการเข้าชมที่ i ในเส้นทาง หากช่องนี้ว่าง ระบบจะถือว่ายานพาหนะไม่ได้ใช้งาน |
transitions[] |
รายการทรานซิชันตามลําดับของเส้นทาง |
hasTrafficInfeasibilities |
เมื่อ
เวลาที่มาถึงที่ next_visit มีแนวโน้มที่จะเกิดช้ากว่ากรอบเวลาปัจจุบันเนื่องจากเวลาเดินทางโดยประมาณ |
routePolyline |
การแทนเส้นประกอบที่เข้ารหัสของเส้นทาง ระบบจะป้อนข้อมูลในช่องนี้เฉพาะในกรณีที่ตั้งค่า |
breaks[] |
ช่วงพักที่กำหนดไว้สำหรับยานพาหนะที่วิ่งเส้นทางนี้ ลำดับ |
metrics |
เมตริกระยะเวลา ระยะทาง และโหลดสำหรับเส้นทางนี้ ระบบจะรวมช่อง |
routeCosts |
ค่าใช้จ่ายของเส้นทางแยกตามช่องคำขอที่เกี่ยวข้องกับค่าใช้จ่าย คีย์คือเส้นทางโปรโตคอลซึ่งสัมพันธ์กับอินพุต OptimizeToursRequest เช่น "model.shipments.pickups.cost" และค่าคือต้นทุนทั้งหมดที่สร้างขึ้นจากช่องค่าใช้จ่ายที่เกี่ยวข้อง ซึ่งรวบรวมจากทั่วทั้งเส้นทาง กล่าวคือ cost["model.shipments.pickups.cost"] คือผลรวมของค่าใช้จ่ายในการรับสินค้าทั้งหมดตลอดเส้นทาง ระบบจะรายงานค่าใช้จ่ายทั้งหมดที่กำหนดไว้ในโมเดลอย่างละเอียดที่นี่ ยกเว้นค่าใช้จ่ายที่เกี่ยวข้องกับแอตทริบิวต์การเปลี่ยน ซึ่งจะรายงานแบบรวมข้อมูล ณ วันที่ 1/2022 เท่านั้น |
routeTotalCost |
ต้นทุนรวมของเส้นทาง ผลรวมของค่าใช้จ่ายทั้งหมดในแผนที่ต้นทุน |
ไปที่
การเข้าชมที่เกิดขึ้นระหว่างเส้นทาง การเข้าชมนี้ตรงกับการรับสินค้าหรือการจัดส่งของ Shipment
การแสดง JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
ช่อง | |
---|---|
shipmentIndex |
ดัชนีของช่อง |
isPickup |
หากเป็นจริง การเข้าชมจะสอดคล้องกับการรับ |
visitRequestIndex |
ดัชนีของ |
startTime |
เวลาที่การเข้าชมเริ่มต้น โปรดทราบว่ายานพาหนะอาจมาถึงสถานที่เข้าชมเร็วกว่านี้ เวลาสอดคล้องกับ การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและทศนิยมสูงสุด 9 หลัก ตัวอย่าง: |
loadDemands |
ดีมานด์การโหลดการเข้าชมทั้งหมดเป็นผลรวมของการจัดส่งและคำขอเข้าชม |
detour |
เวลาอ้อมทางเพิ่มเติมเนื่องจากมีการเข้าชมการจัดส่งในเส้นทางก่อนการเข้าชม และเวลารอที่อาจเกิดขึ้นเนื่องจากกรอบเวลา หากการเข้าชมเป็นการนําส่ง ระบบจะคํานวณการอ้อมเส้นทางจากการเข้าชมเพื่อรับสินค้าที่เกี่ยวข้องและเท่ากับ
มิเช่นนั้น ระบบจะคํานวณจากยานพาหนะ
ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
shipmentLabel |
สำเนาของ |
visitLabel |
สําเนาของ |
ทรานซิชัน
การเปลี่ยนระหว่างเหตุการณ์ 2 รายการในเส้นทาง ดูคำอธิบายของ ShipmentRoute
หากยานพาหนะไม่มี startLocation
และ/หรือ endLocation
เมตริกการเดินทางที่เกี่ยวข้องจะเป็น 0
การแสดง JSON |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
ช่อง | |
---|---|
travelDuration |
ระยะเวลาการเดินทางในช่วงการเปลี่ยนผ่านนี้ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย " |
travelDistanceMeters |
ระยะทางที่เดินทางระหว่างการเปลี่ยน |
trafficInfoUnavailable |
เมื่อมีการขอข้อมูลการเข้าชมผ่าน |
delayDuration |
ผลรวมของระยะเวลาการเลื่อนเวลาที่ใช้กับทรานซิชันนี้ หากมี การหน่วงเวลาจะเริ่มที่ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย " |
breakDuration |
ผลรวมของระยะเวลาการพักที่เกิดขึ้นระหว่างการเปลี่ยนผ่านนี้ หากมี รายละเอียดเกี่ยวกับเวลาเริ่มต้นและระยะเวลาของช่วงพักแต่ละช่วงซึ่งจัดเก็บไว้ใน ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย " |
waitDuration |
เวลาที่ใช้ในการรอระหว่างการเปลี่ยนนี้ ระยะเวลาการรอจะสอดคล้องกับเวลาที่ไม่มีการใช้งานและไม่รวมเวลาพัก และโปรดทราบว่าเวลารอนี้อาจแบ่งออกเป็นหลายช่วงเวลาที่ไม่ต่อเนื่องกัน ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
totalDuration |
ระยะเวลาทั้งหมดของการเปลี่ยน ซึ่งระบุไว้เพื่อความสะดวก โดยมีค่าเท่ากับ
ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย " |
startTime |
เวลาเริ่มต้นของการเปลี่ยนนี้ การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขเศษส่วนสูงสุด 9 หลัก ตัวอย่าง: |
routePolyline |
การนําเสนอเส้นประกอบที่เข้ารหัสของเส้นทางที่เดินตามระหว่างการเปลี่ยน ระบบจะป้อนข้อมูลในช่องนี้หากมีการตั้งค่า |
routeToken |
เอาต์พุตเท่านั้น โทเค็นทึบที่สามารถส่งผ่านไปยัง SDK การนำทางเพื่อจัดโครงสร้างเส้นทางใหม่ในระหว่างการนำทาง และในกรณีที่มีการเปลี่ยนเส้นทาง ให้ยึดตามความตั้งใจเดิมขณะสร้างเส้นทาง ถือว่าโทเค็นนี้เป็น Blob แบบทึบ อย่าเปรียบเทียบค่าของเส้นทางนี้ในคำขอต่างๆ เนื่องจากค่าอาจเปลี่ยนแปลงได้แม้ว่าบริการจะแสดงผลเส้นทางเดียวกันทุกประการก็ตาม ระบบจะป้อนข้อมูลในช่องนี้เฉพาะในกรณีที่ตั้งค่า |
vehicleLoads |
การโหลดยานพาหนะระหว่างการเปลี่ยนผ่านนี้ สำหรับแต่ละประเภทที่ปรากฏใน น้ำหนักบรรทุกระหว่างการเปลี่ยนเส้นทางครั้งแรกคือน้ำหนักบรรทุกเริ่มต้นของเส้นทางยานพาหนะ จากนั้นหลังจากการเข้าชมแต่ละครั้ง ระบบจะเพิ่มหรือลบ |
EncodedPolyline
การนำเสนอที่เข้ารหัสของเส้นประกอบ ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัสเส้นประกอบได้ที่ https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding
การแสดง JSON |
---|
{ "points": string } |
ช่อง | |
---|---|
points |
สตริงที่แสดงจุดที่เข้ารหัสของเส้นประกอบ |
พัก
ข้อมูลที่แสดงถึงการหยุดพัก
การแสดง JSON |
---|
{ "startTime": string, "duration": string } |
ช่อง | |
---|---|
startTime |
เวลาเริ่มต้นของช่วงพัก การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและทศนิยมสูงสุด 9 หลัก ตัวอย่าง: |
duration |
ระยะเวลาของการพัก ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |