เส้นทางของยานพาหนะสามารถแยกย่อยตามแกนเวลาได้ดังนี้ (เราถือว่ามีการเข้าชม 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
โปรดทราบว่าเราแยกความแตกต่างระหว่าง
- "เหตุการณ์ที่ตรงเวลา" เช่น การเริ่มต้นและสิ้นสุดของยานพาหนะ รวมถึงการเริ่มต้นและสิ้นสุดของการเข้าชมแต่ละครั้ง (หรือที่เรียกว่าการมาถึงและการออกเดินทาง) โดยจะเกิดขึ้นในวินาทีที่กำหนด
- "ช่วงเวลา" เช่น การเข้าชมเอง และการเปลี่ยนผ่านระหว่างการเข้าชม แม้ว่าบางครั้งช่วงเวลาอาจมีระยะเวลาเป็น 0 เช่น เริ่มต้นและสิ้นสุดในวินาทีเดียวกัน แต่โดยทั่วไปแล้วช่วงเวลาจะมีระยะเวลาเป็นค่าบวก
ค่าคงที่:
- หากมีการเข้าชม 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 ในระหว่างการเปลี่ยนผ่านได้ดังนี้
- โดยทั้ง 2 ส่วนจะไม่ทับซ้อนกัน
- 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 |
เวลาที่ยานพาหนะเริ่มเส้นทาง ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
vehicleEndTime |
เวลาที่รถสิ้นสุดเส้นทาง ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
visits[] |
ลําดับการเข้าชมที่เรียงตามลําดับซึ่งแสดงเส้นทาง visits[i] คือการเข้าชมครั้งที่ i ในเส้นทาง หากช่องนี้ว่างเปล่า ระบบจะถือว่ารถไม่ได้ใช้งาน |
transitions[] |
รายการการเปลี่ยนเส้นทางที่เรียงลำดับแล้วสำหรับเส้นทาง |
hasTrafficInfeasibilities |
เมื่อตั้งค่า การมาถึงที่ next_visit มีแนวโน้มที่จะเกิดขึ้นในภายหลังกว่ากรอบเวลาปัจจุบันเนื่องจากเวลาเดินทางโดยประมาณเพิ่มขึ้น |
routePolyline |
การแสดงเส้นประกอบที่เข้ารหัสของเส้นทาง ระบบจะป้อนข้อมูลในช่องนี้ก็ต่อเมื่อตั้งค่า |
breaks[] |
เวลาพักที่กำหนดไว้สำหรับยานพาหนะที่วิ่งในเส้นทางนี้ |
metrics |
เมตริกระยะเวลา ระยะทาง และภาระงานสำหรับเส้นทางนี้ ระบบจะรวมฟิลด์ของ |
vehicleFullness |
ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต |
routeCosts |
ต้นทุนของเส้นทางซึ่งแบ่งตามช่องคำขอที่เกี่ยวข้องกับต้นทุน คีย์คือเส้นทาง Proto ที่เกี่ยวข้องกับ OptimizeToursRequest ของอินพุต เช่น "model.shipments.pickups.cost" และค่าคือต้นทุนทั้งหมดที่สร้างขึ้นโดยช่องต้นทุนที่เกี่ยวข้อง ซึ่งรวบรวมไว้ในเส้นทางทั้งหมด กล่าวอีกนัยหนึ่งคือ costs["model.shipments.pickups.cost"] คือผลรวมของต้นทุนการรับสินค้าทั้งหมดในเส้นทาง ต้นทุนทั้งหมดที่กำหนดไว้ในโมเดลจะรายงานอย่างละเอียดที่นี่ ยกเว้นต้นทุนที่เกี่ยวข้องกับ TransitionAttributes ซึ่งจะรายงานในลักษณะที่รวบรวมไว้เท่านั้น ณ วันที่ 01/2022 |
routeTotalCost |
ต้นทุนรวมของเส้นทาง ผลรวมของค่าใช้จ่ายทั้งหมดในแผนที่ต้นทุน |
ไปที่
การเข้าชมที่ดำเนินการระหว่างเส้นทาง การเข้าชมนี้สอดคล้องกับการรับหรือนำส่ง Shipment
| การแสดง JSON |
|---|
{ "shipmentIndex": integer, "isPickup": boolean, "visitRequestIndex": integer, "startTime": string, "loadDemands": { string: { object ( |
| ช่อง | |
|---|---|
shipmentIndex |
ดัชนีของช่อง |
isPickup |
หากเป็นจริง การเข้าชมจะสอดคล้องกับการรับ |
visitRequestIndex |
ดัชนีของ |
startTime |
เวลาที่การเข้าชมเริ่มต้น โปรดทราบว่ายานพาหนะอาจมาถึงสถานที่นัดหมายก่อนเวลาที่ระบุไว้ เวลาเป็นไปตาม ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
loadDemands |
ดีมานด์การโหลดการเข้าชมทั้งหมดเป็นผลรวมของการจัดส่งและคำขอเข้าชม |
detour |
เวลาอ้อมเพิ่มเติมเนื่องจากการจัดส่งที่เข้าชมในเส้นทางก่อนการเข้าชมและเวลาที่อาจต้องรอซึ่งเกิดจากช่วงเวลา หากการเข้าชมเป็นการนำส่ง ระบบจะคำนวณการอ้อมจากการเข้าชมการรับสินค้าที่เกี่ยวข้องและเท่ากับ มิฉะนั้น ระบบจะคำนวณจาก ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย " |
shipmentLabel |
สำเนาของ |
visitLabel |
สำเนาของ |
visitType |
ไม่บังคับ ระบุประเภทการเข้าชม ลบล้างฟิลด์ |
injectedSolutionLocationToken |
โทเค็นแบบทึบแสงที่แสดงข้อมูลเกี่ยวกับสถานที่ที่เข้าชม ระบบอาจป้อนข้อมูลในช่องนี้ในการเข้าชมเส้นทางผลลัพธ์เมื่อตั้งค่า ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request |
VisitType
ระบุว่าการเข้าชมเป็นการรับสินค้า การนำส่ง หรือการเข้าชม Stop การเข้าชม Stop จะใช้เมื่อเปิดใช้การเพิ่มประสิทธิภาพแบบมัลติโมดัลเท่านั้น
| Enum | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
ประเภทการเข้าชมที่ไม่ได้ระบุ |
PICKUP_SHIPMENT |
การเข้าชมสอดคล้องกับการรับสินค้าที่จัดส่ง |
DELIVER_SHIPMENT |
การเข้าชมจะสอดคล้องกับการนำส่งสินค้า |
ทรานซิชัน
เปลี่ยนระหว่าง 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 |
เวลาเริ่มต้นของการเปลี่ยนผ่านนี้ ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
routePolyline |
การแสดงเส้นประกอบที่เข้ารหัสของเส้นทางที่ใช้ในระหว่างการเปลี่ยน ระบบจะป้อนข้อมูลในช่องนี้ก็ต่อเมื่อตั้งค่า |
routeToken |
เอาต์พุตเท่านั้น โทเค็นแบบทึบแสงที่ส่งไปยัง Navigation 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 |
เวลาเริ่มต้นของช่วงพัก ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
duration |
ระยะเวลาของการหยุดพัก ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย " |
VehicleFullness
VehicleFullness คือเมตริกที่คำนวณว่ายานพาหนะเต็มหรือไม่ ฟิลด์ VehicleFullness แต่ละฟิลด์มีค่าระหว่าง 0 ถึง 1 ซึ่งคำนวณเป็นอัตราส่วนระหว่างฟิลด์เมตริกที่จำกัด (เช่น AggregatedMetrics.travel_distance_meters) กับขีดจำกัดของยานพาหนะที่เกี่ยวข้อง (เช่น Vehicle.route_distance_limit) หากมี มิฉะนั้น ระบบจะไม่ตั้งค่าอัตราส่วนความสมบูรณ์ หากขีดจำกัดเป็น 0 ระบบจะตั้งค่าช่องเป็น 1 หมายเหตุ: เมื่อเส้นทางมีปัญหาด้านการจราจร อัตราส่วนความหนาแน่นดิบบางรายการอาจเกิน 1.0 เช่น ยานพาหนะอาจเกินขีดจำกัดระยะทาง ในกรณีเหล่านี้ เราจะจำกัดค่าความสมบูรณ์ไว้ที่ 1.0
| การแสดง JSON |
|---|
{ "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } |
| ช่อง | |
|---|---|
maxFullness |
ค่าสูงสุดของฟิลด์อื่นๆ ทั้งหมดในข้อความนี้ |
distance |
อัตราส่วนระหว่าง |
travelDuration |
อัตราส่วนระหว่าง [AggregatedMetrics.travel_duration_seconds][] กับ |
activeDuration |
อัตราส่วนระหว่าง [AggregatedMetrics.total_duration_seconds][] กับ |
maxLoad |
อัตราส่วนสูงสุดใน [AggregatedMetrics.max_load][] ทุกประเภทและ |
activeSpan |
อัตราส่วน (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) สำหรับยานพาหนะที่ระบุ หากไม่มีตัวหาร ระบบจะใช้ ( |