يمكن تقسيم مسار المركبة على محور الوقت على النحو التالي (نفترض أنّ هناك 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 أثناء عملية الانتقال.
- ولا تتداخل مع بعضها.
- يجب أن يكون التأخير فريدًا ويجب أن يكون فترة زمنية متجاورة قبل الزيارة التالية مباشرةً (أو نهاية الرحلة). وبالتالي، يكفي معرفة مدة التأخير لمعرفة وقت بدئه وانتهائه.
- فترات الاستراحة هي فترات زمنية متجاورة وغير متداخلة. يحدّد الردّ وقت بدء كل استراحة ومدتها.
- يمكن "مقاطعة" حالتي 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 |
تكلفة المسار، مقسّمة حسب حقول الطلبات ذات الصلة بالتكلفة المفاتيح هي مسارات أولية، نسبةً إلى OptimizeToursRequest للإدخال، مثل "model.shipments.pickups.cost"، والقيم هي التكلفة الإجمالية التي تم إنشاؤها بواسطة حقل التكلفة المقابل، ويتم تجميعها على مستوى المسار بأكمله. بعبارة أخرى، costs["model.shipments.pickups.cost"] هو مجموع جميع تكاليف الاستلام على طول المسار. يتم هنا عرض جميع التكاليف المحدّدة في النموذج بالتفصيل، باستثناء التكاليف المتعلّقة بسمات الانتقال التي يتم عرضها بشكل مجمّع فقط اعتبارًا من 2022/01. |
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 |
وقت إضافي للانحراف عن المسار بسبب عمليات التسليم التي تمّت على المسار قبل الزيارة ووقت الانتظار المحتمل الناتج عن الفترات الزمنية. إذا كانت الزيارة عملية تسليم، يتم احتساب الانحراف عن المسار من زيارة الاستلام المقابلة ويكون مساويًا لما يلي: بخلاف ذلك، يتم احتسابه من المركبة مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
shipmentLabel |
نسخة من |
visitLabel |
نسخة من |
visitType |
اختياريّ. تحدّد هذه السمة نوع الزيارة. تتجاوز هذه السمة قيمة الحقل |
injectedSolutionLocationToken |
رمز مميّز غير شفاف يمثّل معلومات حول موقع الزيارة. قد تتم تعبئة هذا الحقل في زيارات مسارات النتائج عندما تكون قيمة تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request لمزيد من التفاصيل. |
VisitType
تشير هذه السمة إلى ما إذا كانت الزيارة هي لاستلام الطلب أو لتسليمه أو لزيارة Stop. لا يتم استخدام الزيارات إلى Stop إلا عند تفعيل ميزة "التحسين المتعدّد الوسائط".
| عمليات التعداد | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
نوع الزيارة غير محدّد. |
PICKUP_SHIPMENT |
تشير الزيارة إلى استلام شحنة. |
DELIVER_SHIPMENT |
تشير الزيارة إلى عملية تسليم شحنة. |
الانتقال
الانتقال بين حدثَين على المسار اطّلِع على وصف ShipmentRoute.
إذا لم تكن المركبة مزوّدة بـ startLocation و/أو endLocation، تكون مقاييس التنقّل ذات الصلة صفرًا.
| تمثيل JSON |
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
| الحقول | |
|---|---|
travelDuration |
مدة السفر خلال هذه الفترة الانتقالية مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
travelDistanceMeters |
المسافة المقطوعة أثناء عملية الانتقال |
trafficInfoUnavailable |
عند طلب بيانات حركة المرور من خلال |
delayDuration |
مجموع مدة التأخير المطبَّقة على عملية النقل هذه إذا كان هناك أي تأخير، يبدأ التأخير قبل مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
breakDuration |
مجموع مدة الفواصل الإعلانية التي تحدث أثناء هذا الانتقال، إن وُجدت يتم تخزين تفاصيل حول وقت بدء كل استراحة ومدتها في مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
waitDuration |
الوقت الذي تم قضاؤه في الانتظار خلال هذه الفترة الانتقالية تتوافق مدة الانتظار مع وقت عدم النشاط ولا تشمل وقت الاستراحة. يُرجى العِلم أيضًا أنّ مدة الانتظار هذه قد يتم تقسيمها إلى عدة فواصل زمنية غير متجاورة. مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
totalDuration |
إجمالي مدة الانتقال، ويتم توفيرها لتسهيل الأمر، وهي تساوي:
مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
startTime |
وقت بدء هذا الانتقال يستخدم المعيار RFC 3339، حيث يكون الناتج الذي يتم إنشاؤه مُمثلاً بالتوقيت العالمي المنسَّق مع حرف Z في النهاية ويستخدم الأرقام الجزئية 0 أو 3 أو 6 أو 9. تُقبل أيضًا المعادلات الأخرى التي لا تستخدم حرف Z. أمثلة: |
routePolyline |
تمثيل خطوط متعدّدة الأضلاع المرمّزة للمسار الذي تم اتّباعه أثناء الانتقال. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط |
routeToken |
للقراءة فقط. رمز مبهم يمكن تمريره إلى Navigation SDK لإعادة إنشاء المسار أثناء التنقّل، وفي حال إعادة التوجيه، يتم الالتزام بالنية الأصلية عند إنشاء المسار. تعامَل مع هذا الرمز كبيانات ثنائية مبهمة. لا تقارِن قيمته بين الطلبات لأنّ قيمته قد تتغيّر حتى إذا كانت الخدمة تعرض المسار نفسه تمامًا. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط |
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 |
مدة الاستراحة مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ " |
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 |
نسبة |
activeDuration |
نسبة |
maxLoad |
النسبة القصوى بين جميع أنواع [AggregatedMetrics.max_load][] و |
activeSpan |
تمثّل هذه السمة النسبة (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) لمركبة معيّنة. في حال عدم توفّر المقام، يتم استخدام ( |