مسیر یک وسیله نقلیه را میتوان در امتداد محور زمان، به این صورت تجزیه کرد (فرض میکنیم 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 انتقال وجود دارد.
- یک بازدید همیشه توسط یک گذار قبل از آن (همان شاخص) و یک گذار بعد از آن (شاخص + ۱) احاطه شده است.
- روشن شدن خودرو همیشه با انتقال شماره ۰ دنبال میشود.
- انتهای وسیله نقلیه همیشه با انتقال #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
در نهایت، در اینجا نحوهی تنظیم زمان سفر، زمان استراحت، زمان تأخیر و زمان انتظار در طول یک انتقال آورده شده است.
- آنها همپوشانی ندارند.
- مقدار DELAY منحصر به فرد است و باید یک دوره زمانی پیوسته درست قبل از بازدید بعدی (یا پایان وسیله نقلیه) باشد. بنابراین، دانستن مدت زمان تأخیر برای دانستن زمان شروع و پایان آن کافی است.
- وقفهها (BREAKS) دورههای زمانی پیوسته و بدون همپوشانی هستند. پاسخ، زمان شروع و مدت هر وقفه را مشخص میکند.
- سفر و انتظار «قابل پیشگیری» هستند: میتوانند در طول این انتقال چندین بار قطع شوند. مشتریان میتوانند فرض کنند که سفر «در اسرع وقت» اتفاق میافتد و «انتظار» زمان باقیمانده را پر میکند.
یک مثال (پیچیده):
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-normalized خواهد بود و از ارقام کسری ۰، ۳، ۶ یا ۹ استفاده میکند. آفستهای غیر از "Z" نیز پذیرفته میشوند. مثالها: |
vehicleEndTime | زمانی که وسیله نقلیه مسیر خود را به پایان میرساند. از RFC 3339 استفاده میکند، که در آن خروجی تولید شده همیشه به صورت Z-normalized خواهد بود و از ارقام کسری ۰، ۳، ۶ یا ۹ استفاده میکند. آفستهای غیر از "Z" نیز پذیرفته میشوند. مثالها: |
visits[] | دنباله مرتبی از بازدیدها که نشاندهنده یک مسیر است. visits[i] iامین بازدید در مسیر است. اگر این فیلد خالی باشد، وسیله نقلیه بلااستفاده در نظر گرفته میشود. |
transitions[] | لیست مرتبشدهای از انتقالها برای مسیر. |
hasTrafficInfeasibilities | وقتی ورود به next_visit احتمالاً دیرتر از بازه زمانی فعلی آن اتفاق خواهد افتاد، زیرا تخمین زمان سفر |
routePolyline | نمایش چندخطی کدگذاریشدهی مسیر. این فیلد فقط در صورتی پر میشود که |
breaks[] | وقفههای برنامهریزیشده برای وسیله نقلیهای که این مسیر را طی میکند. توالی |
metrics | معیارهای مدت زمان، مسافت و بار برای این مسیر. فیلدهای |
vehicleFullness | فیلد تجربی: رفتار یا وجود این میدان ممکن است در آینده تغییر کند. |
routeCosts | هزینه مسیر، تفکیکشده بر اساس فیلدهای درخواست مرتبط با هزینه. کلیدها، مسیرهای اولیه، نسبت به ورودی OptimizeToursRequest هستند، مثلاً "model.shipments.pickups.cost"، و مقادیر، کل هزینه تولید شده توسط فیلد هزینه مربوطه هستند که در کل مسیر تجمیع شدهاند. به عبارت دیگر، costs["model.shipments.pickups.cost"] مجموع تمام هزینههای برداشت در طول مسیر است. تمام هزینههای تعریفشده در مدل در اینجا با جزئیات گزارش شدهاند، به استثنای هزینههای مربوط به TransitionAttributes که فقط از تاریخ 2022/01 به صورت تجمیعشده گزارش شدهاند. |
routeTotalCost | هزینه کل مسیر. مجموع تمام هزینهها در نقشه هزینه. |
بازدید
بازدیدی که در طول یک مسیر انجام میشود. این بازدید مربوط به دریافت یا تحویل Shipment است.
| نمایش JSON |
|---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
| فیلدها | |
|---|---|
shipmentIndex | فهرست فیلد |
isPickup | اگر درست باشد، بازدید معادل دریافت |
visitRequestIndex | فهرست |
startTime | زمان شروع بازدید. توجه داشته باشید که ممکن است وسیله نقلیه زودتر از این به محل بازدید برسد. زمانها با از RFC 3339 استفاده میکند، که در آن خروجی تولید شده همیشه به صورت Z-normalized خواهد بود و از ارقام کسری ۰، ۳، ۶ یا ۹ استفاده میکند. آفستهای غیر از "Z" نیز پذیرفته میشوند. مثالها: |
loadDemands | کل تقاضای بار بازدید به صورت مجموع محموله و درخواست بازدید |
detour | زمان اضافی انحراف از مسیر به دلیل محمولههای بازدید شده در مسیر قبل از بازدید و زمان انتظار بالقوه ناشی از پنجرههای زمانی. اگر بازدید، تحویل کالا باشد، انحراف از بازدید مربوط به تحویل محاسبه شده و برابر است با: در غیر این صورت، از مدت زمانی بر حسب ثانیه با حداکثر نه رقم کسری که به ' |
shipmentLabel | کپی از |
visitLabel | کپی از |
injectedSolutionLocationToken | یک توکن مات که اطلاعات مربوط به مکان بازدید را نشان میدهد. این فیلد ممکن است در بازدیدهای مسیرهای نتیجه، زمانی که آزمایشی: برای جزئیات بیشتر به https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request مراجعه کنید. |
گذار
انتقال بین دو رویداد در مسیر. به توضیحات ShipmentRoute مراجعه کنید.
اگر وسیله نقلیه startLocation و/یا endLocation نداشته باشد، معیارهای سفر مربوطه 0 هستند.
| نمایش 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-normalized خواهد بود و از ارقام کسری ۰، ۳، ۶ یا ۹ استفاده میکند. آفستهای غیر از "Z" نیز پذیرفته میشوند. مثالها: |
routePolyline | نمایش چندخطی کدگذاریشده از مسیری که در طول انتقال دنبال میشود. این فیلد فقط در صورتی پر میشود که |
routeToken | فقط خروجی. یک توکن مبهم که میتواند به Navigation SDK منتقل شود تا مسیر را در حین ناوبری بازسازی کند و در صورت تغییر مسیر، هدف اصلی هنگام ایجاد مسیر را رعایت کند. با این توکن به عنوان یک حباب مبهم رفتار کنید. مقدار آن را در درخواستهای مختلف مقایسه نکنید زیرا ممکن است مقدار آن حتی اگر سرویس دقیقاً همان مسیر را برگرداند، تغییر کند. این فیلد فقط در صورتی پر میشود که |
vehicleLoads | بارهای وسیله نقلیه در طول این انتقال، برای هر نوعی که یا در بارهای اولین انتقال، بارهای اولیه مسیر وسیله نقلیه هستند. سپس، پس از هر بازدید، بسته به اینکه بازدید، بارگیری یا تحویل بوده است، |
پلیلاین رمزگذاریشده
نمایش کدگذاری شده یک چندخطی. اطلاعات بیشتر در مورد کدگذاری چندخطی را میتوانید اینجا بیابید: 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-normalized خواهد بود و از ارقام کسری ۰، ۳، ۶ یا ۹ استفاده میکند. آفستهای غیر از "Z" نیز پذیرفته میشوند. مثالها: |
duration | مدت زمان استراحت. مدت زمانی بر حسب ثانیه با حداکثر نه رقم کسری که به ' |
پر بودن وسیله نقلیه
VehicleFullness معیاری است که میزان پر بودن یک وسیله نقلیه را محاسبه میکند. هر فیلد VehicleFullness بین ۰ و ۱ است که به عنوان نسبت بین یک فیلد معیار محدود شده (مثلاً AggregatedMetrics.travel_distance_meters ) و محدودیت وسیله نقلیه مرتبط با آن (مثلاً Vehicle.route_distance_limit ) در صورت وجود محاسبه میشود. در غیر این صورت، نسبت پر بودن تنظیم نشده باقی میماند. اگر محدودیت ۰ باشد، فیلد روی ۱ تنظیم میشود. توجه: وقتی یک مسیر در معرض عدم امکان ترافیک قرار دارد، برخی از نسبتهای خام پر بودن ممکن است از ۱.۰ فراتر روند، مثلاً وسیله نقلیه ممکن است از حد مسافت خود فراتر رود. در این موارد، مقادیر پر بودن را روی ۱.۰ محدود میکنیم.
| نمایش 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 - earlyVehicleStartTime) برای یک وسیله نقلیه معین. اگر مخرج کسر وجود نداشته باشد، به جای آن از ( |