- Zapis JSON
- Przesyłka
- VisitRequest
- LatLng
- Waypoint
- Lokalizacja
- TimeWindow
- Pojazd
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Odstęp czasu
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Cel
- Typ
- DurationDistanceMatrix
- Wiersz
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Model dostawy zawiera zestaw dostaw, które muszą być wykonane przez zestaw pojazdów, przy jednoczesnym zminimalizowaniu całkowitego kosztu, który jest sumą:
- koszt wyznaczania tras dla pojazdów (suma kosztu całkowitego czasu, kosztu czasu przejazdu i kosztu stałego dla wszystkich pojazdów);
- kary za niezrealizowaną dostawę.
- koszt globalnego czasu trwania dostaw;
| Zapis JSON |
|---|
{ "shipments": [ { object ( |
| Pola | |
|---|---|
shipments[] |
Zestaw dostaw, które muszą zostać wykonane w modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do wizyt. |
objectives[] |
Zbiór celów dla tego modelu, które przekształcimy w koszty. Jeśli model wejściowy nie jest pusty, musi być bezpłatny. Aby uzyskać zmodyfikowane żądanie, użyj funkcji Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
globalStartTime |
Globalny czas rozpoczęcia i zakończenia modelu: żadne czasy poza tym zakresem nie mogą być uznane za prawidłowe. Okres, którego dotyczy model, musi być krótszy niż rok, tzn. wartości Jeśli używasz pól Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
globalEndTime |
Jeśli nie zostanie określona, domyślnie używana jest data 1 stycznia 1971 r., godzina 00:00:00 UTC (czyli sekundy: 31536000, nanosekundy: 0). Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
globalDurationCostPerHour |
„Globalny czas trwania” całego planu to różnica między najwcześniejszą godziną rozpoczęcia a najpóźniejszą godziną zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać do tej ilości koszt za godzinę, aby na przykład zoptymalizować czas ukończenia zadania. Koszt musi być podany w tej samej jednostce co |
durationDistanceMatrices[] |
Określa macierze czasu trwania i odległości używane w modelu. Jeśli to pole jest puste, używane są odległości w Mapach Google lub odległości geodezyjne, w zależności od wartości pola Przykłady użycia:
|
durationDistanceMatrixSrcTags[] |
Tagi określające źródła macierzy czasu trwania i odległości; Tagi odpowiadają polom |
durationDistanceMatrixDstTags[] |
Tagi określające miejsca docelowe macierzy czasu trwania i odległości: Tagi odpowiadają polom |
transitionAttributes[] |
Atrybuty przejścia dodane do modelu. |
shipmentTypeIncompatibilities[] |
Zestawy niezgodnych typów dostawy (patrz |
shipmentTypeRequirements[] |
Zestawy |
precedenceRules[] |
Zestaw reguł pierwszeństwa, które muszą być egzekwowane w modelu. WAŻNE: używanie reguł pierwszeństwa ogranicza rozmiar problemu, który można zoptymalizować. Żądania korzystające z reguł pierwszeństwa, które obejmują wiele przesyłek, mogą zostać odrzucone. |
maxActiveVehicles |
Ogranicza maksymalną liczbę aktywnych pojazdów. Pojazd jest aktywny, jeśli na jego trasie zrealizowano co najmniej 1 dostawę. Może to służyć do ograniczenia liczby tras w przypadku, gdy liczba kierowców jest mniejsza niż liczba pojazdów, a flota pojazdów jest niejednorodna. Optymalizacja wybierze wtedy najlepszy podzbiór pojazdów do wykorzystania. Musi być ściśle dodatnia. |
Wysyłka
Przesyłka pojedynczego produktu z jednego miejsca odbioru do jednego miejsca dostawy. Aby uznać dostawę za zrealizowaną, unikalny pojazd musi odwiedzić jeden z punktów odbioru (i odpowiednio zmniejszyć swoje wolne moce), a następnie jeden z punktów dostawy (i odpowiednio zwiększyć swoje wolne moce).
| Zapis JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Pola | |
|---|---|
displayName |
Zdefiniowana przez użytkownika nazwa wyświetlana przesyłki. Może mieć maksymalnie 63 znaki i zawierać znaki UTF-8. |
pickups[] |
Zestaw alternatywnych opcji odbioru powiązanych z przesyłką. Jeśli nie określono inaczej, pojazd musi tylko odwiedzić lokalizację odpowiadającą dostawom. |
deliveries[] |
Zestaw alternatywnych opcji dostawy powiązanych z przesyłką. Jeśli nie określono inaczej, pojazd musi tylko odwiedzić lokalizację odpowiadającą odbiorom. |
loadDemands |
Wymagania dotyczące załadunku (np. waga, objętość, liczba palet itp.). Klucze w mapie powinny być identyfikatorami opisującymi typ odpowiedniego obciążenia, najlepiej z uwzględnieniem jednostek. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli danego klucza nie ma na mapie, odpowiedni ładunek jest uznawany za pusty. |
allowedVehicleIndices[] |
Zestaw pojazdów, które mogą zrealizować tę dostawę. Jeśli to pole jest puste, wszystkie pojazdy mogą wykonać to działanie. Pojazdy są podawane według indeksu na liście |
costsPerVehicle[] |
Określa koszt poniesiony w przypadku dostawy przesyłki każdym pojazdem. Jeśli jest określony, musi mieć JEDNĄ z tych wartości:
Koszty te muszą być podane w tej samej jednostce co |
costsPerVehicleIndices[] |
Indeksy pojazdów, do których odnosi się |
pickupToDeliveryAbsoluteDetourLimit |
Określa maksymalny bezwzględny czas objazdu w porównaniu z najkrótszą trasą od miejsca odbioru do miejsca dostawy. Jeśli jest określony, musi być nieujemny, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech t będzie najkrótszym czasem potrzebnym na przejazd z wybranej alternatywnej lokalizacji odbioru bezpośrednio do wybranej alternatywnej lokalizacji dostawy. Następnie ustawienie Jeśli w przypadku tej samej dostawy określono zarówno limity względne, jak i bezwzględne, w przypadku każdej możliwej pary odbioru/dostawy stosowany jest bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdów. Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
pickupToDeliveryTimeLimit |
Określa maksymalny czas od rozpoczęcia odbioru do rozpoczęcia dostawy przesyłki. Jeśli jest określony, musi być nieujemny, a przesyłka musi zawierać co najmniej odbiór i dostawę. Nie zależy to od tego, które alternatywne opcje odbioru i dostawy zostały wybrane, ani od prędkości pojazdu. Można to określić wraz z maksymalnymi ograniczeniami dotyczącymi objazdu: rozwiązanie będzie uwzględniać obie specyfikacje. Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
shipmentType |
Niepusty ciąg znaków określający „typ” tej przesyłki. Za pomocą tej funkcji można określać niezgodności lub wymagania między Różni się od |
label |
Określa etykietę przesyłki. Ta etykieta jest zgłaszana w odpowiedzi w polu |
ignore |
Jeśli wartość to prawda, pomiń tę przesyłkę, ale nie stosuj Zignorowanie dostawy powoduje błąd weryfikacji, jeśli w modelu znajdują się jakiekolwiek Ignorowanie przesyłki realizowanej w |
penaltyCost |
Jeśli przesyłka nie zostanie zrealizowana, ta kara zostanie dodana do ogólnego kosztu tras. Przesyłka jest uznawana za zrealizowaną, jeśli odwiedzono jedną z jej alternatywnych lokalizacji odbioru lub dostawy. Koszt może być wyrażony w tej samej jednostce, która jest używana w przypadku wszystkich innych pól związanych z kosztami w modelu, i musi być dodatni. WAŻNE: jeśli ta kara nie jest określona, uważa się ją za nieskończoną, tzn. dostawa musi zostać zrealizowana. |
pickupToDeliveryRelativeDetourLimit |
Określa maksymalny względny czas objazdu w porównaniu z najkrótszą trasą od miejsca odbioru do miejsca dostawy. Jeśli jest określony, musi być nieujemny, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech t będzie najkrótszym czasem potrzebnym na przejazd z wybranej alternatywnej lokalizacji odbioru bezpośrednio do wybranej alternatywnej lokalizacji dostawy. Następnie ustawienie Jeśli w przypadku tej samej dostawy określono zarówno limity względne, jak i bezwzględne, w przypadku każdej możliwej pary odbioru/dostawy stosowany jest bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdów. |
VisitRequest
Prośba o wizytę, którą można zrealizować pojazdem: ma lokalizację geograficzną (lub dwie, patrz poniżej), godziny otwarcia i zamknięcia reprezentowane przez przedziały czasowe oraz czas trwania usługi (czas spędzony przez pojazd po przybyciu w miejsce odbioru lub dostawy towarów).
| Zapis JSON |
|---|
{ "arrivalLocation": { object ( |
| Pola | |
|---|---|
arrivalLocation |
Lokalizacja geograficzna, do której pojazd dociera podczas wykonywania tej |
arrivalWaypoint |
Punkt pośredni, do którego pojazd dociera podczas wykonywania tego |
departureLocation |
Lokalizacja geograficzna, z której pojazd odjeżdża po zakończeniu tego |
departureWaypoint |
Punkt pośredni, z którego pojazd odjeżdża po zakończeniu tego |
tags[] |
Określa tagi dołączone do żądania wizyty. Puste lub zduplikowane ciągi znaków są niedozwolone. |
timeWindows[] |
Przedziały czasowe, które ograniczają czas przyjazdu do miejsca wizyty. Pamiętaj, że pojazd może odjechać poza przedziałem czasu przyjazdu, tzn. czas przyjazdu + czas trwania nie muszą mieścić się w przedziale czasu. Jeśli pojazd przyjedzie przed Brak ikony Przedziały czasu muszą być rozłączne, tzn. żaden przedział czasu nie może nakładać się na inny ani z nim sąsiadować, a także muszą być podane w kolejności rosnącej. Wartości |
duration |
Czas trwania wizyty, czyli czas spędzony przez pojazd między przyjazdem a odjazdem (do dodania do ewentualnego czasu oczekiwania; patrz Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
cost |
Koszt obsługi tego żądania wizyty na trasie pojazdu. Możesz go użyć do zapłaty różnych kosztów za każdy alternatywny odbiór lub dostawę przesyłki. Koszt musi być podany w tej samej jednostce co |
loadDemands |
Wczytaj wymagania tego żądania wizyty. Działa to tak samo jak pole |
visitTypes[] |
Określa typy wizyt. Może to służyć do przydzielenia dodatkowego czasu potrzebnego pojazdowi na ukończenie wizyty (patrz Typ może wystąpić tylko raz. |
label |
Określa etykietę dla tego |
avoidUTurns |
Określa, czy na trasach dojazdu w tej lokalizacji należy unikać zawracania. Unikanie zawracania jest realizowane w miarę możliwości, ale nie gwarantujemy, że zawracanie zostanie całkowicie wyeliminowane. To funkcja eksperymentalna, a jej działanie może ulec zmianie. Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
LatLng
Obiekt reprezentujący parę szerokości i długości geograficznej. Jest to para liczb zmiennoprzecinkowych podwójnej precyzji, które reprezentują stopnie szerokości i długości geograficznej. O ile nie określono inaczej, ten obiekt musi być zgodny ze standardem WGS84. Wartości muszą mieścić się w znormalizowanych zakresach.
| Zapis JSON |
|---|
{ "latitude": number, "longitude": number } |
| Pola | |
|---|---|
latitude |
Szerokość geograficzna w stopniach. Musi mieścić się w zakresie od –90,0 do +90,0. |
longitude |
Długość geograficzna w stopniach. Musi mieścić się w zakresie [–180,0, +180,0]. |
Punkt pośredni
Zawiera punkt pośredni. Punkty pośrednie oznaczają lokalizacje przyjazdu i odjazdu w przypadku żądań VisitRequest oraz lokalizacje początkowe i końcowe w przypadku pojazdów.
| Zapis JSON |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| Pola | |
|---|---|
sideOfRoad |
Opcjonalnie: Wskazuje, że lokalizacja tego punktu trasy ma preferencję, aby pojazd zatrzymał się po określonej stronie drogi. Gdy ustawisz tę wartość, trasa będzie przebiegać przez to miejsce, aby pojazd mógł zatrzymać się po stronie drogi, w kierunku której jest ono przesunięte od środka drogi. Ta opcja nie działa w przypadku trybu podróży „PIESZO”. |
vehicleStopover |
Wskazuje, że punkt pośredni jest przeznaczony dla pojazdów, które mają się w nim zatrzymać, aby odebrać lub wysadzić pasażerów. Ta opcja działa tylko w przypadku trybu podróży „DRIVING” i gdy „locationType” ma wartość „location”. Eksperymentalne: działanie lub istnienie tego pola może się w przyszłości zmienić. |
Pole zbiorcze location_type. Różne sposoby przedstawiania lokalizacji. location_type może mieć tylko jedną z tych wartości: |
|
location |
Punkt określony za pomocą współrzędnych geograficznych, z opcjonalnym kierunkiem. |
placeId |
Identyfikator miejsca POI powiązany z punktem pośrednim. Jeśli używasz identyfikatora miejsca do określania lokalizacji przyjazdu lub odjazdu w przypadku VisitRequest, użyj identyfikatora miejsca, który jest wystarczająco szczegółowy, aby określić lokalizację LatLng na potrzeby nawigacji do tego miejsca. Na przykład identyfikator miejsca reprezentujący budynek jest odpowiedni, ale identyfikator miejsca reprezentujący drogę jest niezalecany. |
Lokalizacja
Zawiera lokalizację (punkt geograficzny i opcjonalny kierunek).
| Zapis JSON |
|---|
{
"latLng": {
object ( |
| Pola | |
|---|---|
latLng |
Współrzędne geograficzne punktu pośredniego. |
heading |
Kierunek na kompasie powiązany z kierunkiem ruchu. Ta wartość służy do określania strony drogi, z której ma nastąpić odbiór lub na której ma nastąpić wysadzenie. Wartości kierunku mogą wynosić od 0 do 360, gdzie 0 oznacza kierunek północny, 90 – wschodni itd. |
TimeWindow
Okna czasowe ograniczają czas zdarzenia, np. czas przyjazdu w ramach wizyty lub czas rozpoczęcia i zakończenia przejazdu pojazdu.
Sztywne granice czasowe startTime i endTime określają najwcześniejszy i najpóźniejszy czas zdarzenia, tak że startTime <= event_time <=
endTime. Dolna granica miękkiego okna czasowego, softStartTime, wyraża preferencję, aby zdarzenie nastąpiło w momencie softStartTime lub później, poprzez poniesienie kosztu proporcjonalnego do tego, jak długo przed softStartTime nastąpiło zdarzenie. Górna granica miękkiego okna czasowego, softEndTime, wyraża preferencję, aby zdarzenie nastąpiło w momencie softEndTime lub wcześniej, poprzez poniesienie kosztu proporcjonalnego do tego, jak długo po softEndTime nastąpiło zdarzenie. Wartości startTime, endTime, softStartTime i softEndTime powinny mieścić się w globalnych limitach czasu (patrz ShipmentModel.global_start_time i ShipmentModel.global_end_time) i spełniać te warunki:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| Zapis JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| Pola | |
|---|---|
startTime |
Czas rozpoczęcia okna ścisłego. Jeśli nie zostanie określona, zostanie ustawiona na Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
endTime |
Godzina zakończenia sztywnego przedziału czasu. Jeśli nie zostanie określona, zostanie ustawiona na Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
softStartTime |
Czas rozpoczęcia przedziału czasu. Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
softEndTime |
Przybliżona godzina zakończenia przedziału czasu. Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
costPerHourBeforeSoftStartTime |
Koszt za godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi przed softStartTime, obliczany jako: Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono pole softStartTime. |
costPerHourAfterSoftEndTime |
Koszt za godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi po Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono pole |
Pojazd
Modeluje pojazd w przypadku problemu z przesyłką. Rozwiązanie problemu z przesyłką spowoduje utworzenie trasy dla tego pojazdu, która zaczyna się w lokalizacji startLocation i kończy w lokalizacji endLocation. Trasa to sekwencja wizyt (patrz ShipmentRoute).
| Zapis JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| Pola | |
|---|---|
displayName |
Nazwa pojazdu zdefiniowana przez użytkownika. Może mieć maksymalnie 63 znaki i zawierać znaki UTF-8. |
travelMode |
Tryb podróży, który wpływa na drogi, po których może poruszać się pojazd, oraz na jego prędkość. Zobacz też |
routeModifiers |
Zbiór warunków, które muszą zostać spełnione i które wpływają na sposób obliczania tras dla danego pojazdu. |
startLocation |
Lokalizacja geograficzna, w której pojazd rozpoczyna podróż przed odebraniem przesyłek. Jeśli nie zostanie określony, pojazd rozpocznie podróż od pierwszego miejsca odbioru. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić wartości |
startWaypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna podróż przed odebraniem przesyłek. Jeśli nie określono ani |
endLocation |
Lokalizacja geograficzna, w której pojazd kończy ostatni |
endWaypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd kończy ostatni |
startTags[] |
Określa tagi dołączone na początku trasy pojazdu. Puste lub zduplikowane ciągi znaków są niedozwolone. |
endTags[] |
Określa tagi dołączone na końcu trasy pojazdu. Puste lub zduplikowane ciągi znaków są niedozwolone. |
startTimeWindows[] |
Okresy, w których pojazd może wyruszyć z lokalizacji początkowej. Muszą mieścić się w globalnych limitach czasowych (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączne, tzn. żaden przedział czasu nie może nakładać się na inny ani z nim sąsiadować, a ponadto muszą być ułożone w porządku chronologicznym. Wartości |
endTimeWindows[] |
Przedziały czasowe, w których pojazd może dotrzeć do miejsca docelowego. Muszą mieścić się w globalnych limitach czasowych (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączne, tzn. żaden przedział czasu nie może nakładać się na inny ani z nim sąsiadować, a ponadto muszą być ułożone w porządku chronologicznym. Wartości |
unloadingPolicy |
Zasady rozładunku są egzekwowane w przypadku pojazdu. |
loadLimits |
pojemność pojazdu (np. waga, objętość, liczba palet); Klucze na mapie to identyfikatory typu obciążenia, zgodne z kluczami pola |
costPerHour |
Koszty pojazdu: wszystkie koszty sumują się i muszą być podane w tej samej jednostce co Koszt godzinowy trasy pojazdu. Ten koszt jest stosowany do łącznego czasu trwania trasy i obejmuje czas podróży, czas oczekiwania i czas wizyty. Używanie |
costPerTraveledHour |
Koszt za godzinę przejazdu na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży na trasie (czyli czasu podanego w |
costPerKilometer |
Koszt na kilometr trasy pojazdu. Ten koszt jest stosowany do odległości podanej w |
fixedCost |
Stały koszt stosowany, jeśli ten pojazd jest używany do obsługi przesyłki. |
usedIfRouteIsEmpty |
To pole ma zastosowanie tylko do pojazdów, których trasa nie obejmuje żadnych przesyłek. Wskazuje, czy w tym przypadku pojazd powinien być uznawany za używany. Jeśli wartość to „true”, pojazd przemieszcza się z lokalizacji początkowej do końcowej, nawet jeśli nie obsługuje żadnych przesyłek, a koszty czasu i odległości wynikające z przejazdu z lokalizacji początkowej do końcowej są uwzględniane. W przeciwnym razie pojazd nie będzie przemieszczać się z lokalizacji początkowej do końcowej i nie będzie dla niego zaplanowana żadna |
routeDurationLimit |
Limit zastosowany do łącznego czasu trwania trasy pojazdu. W danym |
travelDurationLimit |
Limit stosowany do czasu trwania podróży na trasie pojazdu. W danym |
routeDistanceLimit |
Limit zastosowany do całkowitej odległości trasy pojazdu. W danym |
extraVisitDurationForVisitType |
Określa mapę ciągów visitTypes na czas trwania. Czas trwania to czas dodatkowy do Jeśli prośba o wizytę ma kilka typów, do każdego z nich zostanie dodany czas trwania na mapie. |
breakRule |
Opisuje harmonogram przerw, który ma być stosowany w przypadku tego pojazdu. Jeśli to pole jest puste, dla tego pojazdu nie będą planowane przerwy. |
label |
Określa etykietę tego pojazdu. Ta etykieta jest podawana w odpowiedzi jako |
ignore |
Jeśli ma wartość true, atrybut Jeśli dostawa jest realizowana przez zignorowany pojazd w Jeśli dostawa jest realizowana przez zignorowany pojazd w |
travelDurationMultiple |
Określa współczynnik mnożenia, który można zastosować do zwiększenia lub zmniejszenia czasu podróży tego pojazdu. Na przykład ustawienie tej wartości na 2,0 oznacza, że ten pojazd jest wolniejszy, a czas podróży jest 2 razy dłuższy niż w przypadku standardowych pojazdów. Ten mnożnik nie wpływa na czas trwania wizyt. Ma to wpływ na koszt, jeśli określono wartości OSTRZEŻENIE: czasy podróży zostaną zaokrąglone do najbliższej sekundy po zastosowaniu tego mnożnika, ale przed wykonaniem jakichkolwiek operacji numerycznych. Mały mnożnik może więc spowodować utratę precyzji. Zobacz też |
TravelMode
Tryby podróży, z których mogą korzystać pojazdy.
Powinny to być podzbiory trybów podróży interfejsu Routes API w Google Maps Platform. Więcej informacji znajdziesz na stronie: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Uwaga: WALKING trasy są w wersji beta i czasami mogą nie mieć wyraźnych chodników lub ścieżek dla pieszych. Musisz wyświetlać to ostrzeżenie użytkownikowi w przypadku wszystkich tras pieszych, które wyświetlasz w swojej aplikacji.
| Wartości w polu enum | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Nieokreślony środek transportu, odpowiednik DRIVING. |
DRIVING |
Tryb podróży odpowiadający wskazówkom dojazdu (samochód, …). |
WALKING |
Tryb podróży odpowiadający wskazówkom dojazdu pieszo. |
RouteModifiers
Zawiera zestaw opcjonalnych warunków, które należy spełnić podczas obliczania tras pojazdów. Jest to podobne do RouteModifiers w interfejsie Routes Preferred API w Google Maps Platform. Więcej informacji znajdziesz na stronie https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| Zapis JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| Pola | |
|---|---|
avoidTolls |
Określa, czy w rozsądnych przypadkach należy unikać dróg płatnych. Preferowane będą trasy bez dróg płatnych. Dotyczy to tylko zmotoryzowanych środków transportu. |
avoidHighways |
Określa, czy w miarę możliwości unikać autostrad. Preferowane będą trasy bez autostrad. Dotyczy to tylko zmotoryzowanych środków transportu. |
avoidFerries |
Określa, czy w miarę możliwości unikać promów. Preferowane będą trasy, które nie obejmują podróży promem. Dotyczy to tylko zmotoryzowanych środków transportu. |
avoidIndoor |
Opcjonalnie: Określa, czy należy unikać nawigacji w pomieszczeniach, jeśli jest to możliwe. Priorytet będą miały trasy, które nie zawierają nawigacji w pomieszczeniach. Dotyczy to tylko trybu podróży |
UnloadingPolicy
Zasady dotyczące sposobu rozładunku pojazdu. Dotyczy tylko przesyłek, w przypadku których występuje zarówno odbiór, jak i dostawa.
Pozostałe przesyłki mogą być dostarczane w dowolnym miejscu na trasie niezależnie od unloadingPolicy.
| Wartości w polu enum | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Nieokreślone zasady rozładunku. Dostawy muszą być realizowane po odpowiednich odbiorach. |
LAST_IN_FIRST_OUT |
Dostawy muszą być realizowane w odwrotnej kolejności niż odbiory |
FIRST_IN_FIRST_OUT |
Dostawy muszą być realizowane w tej samej kolejności co odbiory. |
LoadLimit
Określa limit obciążenia pojazdu, np. „ten samochód ciężarowy może przewozić tylko do 3500 kg”. Zobacz loadLimits.
| Zapis JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Pola | |
|---|---|
softMaxLoad |
Limit obciążenia. Zobacz |
costPerUnitAboveSoftMax |
Jeśli obciążenie kiedykolwiek przekroczy |
startLoadInterval |
Dopuszczalny przedział czasu załadunku pojazdu na początku trasy. |
endLoadInterval |
Dopuszczalny przedział czasu załadunku pojazdu na końcu trasy. |
maxLoad |
Maksymalna dopuszczalna wartość obciążenia. |
costPerKilometer |
Koszt przewiezienia 1 jednostki ładunku na odległość 1 km w przypadku tego pojazdu. Może to być używane jako przybliżone zużycie paliwa: jeśli obciążenie jest wagą (w niutonach), to obciążenie × kilometr ma wymiar energii. Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
costPerTraveledHour |
Koszt podróży z jednostką ładunku w ciągu godziny w przypadku tego pojazdu. Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
Interwał
Przedział dopuszczalnych kwot obciążenia.
| Zapis JSON |
|---|
{ "min": string, "max": string } |
| Pola | |
|---|---|
min |
Minimalne dopuszczalne obciążenie. Wartość musi być ≥ 0. Jeśli oba parametry są określone, wartość |
max |
Maksymalne dopuszczalne obciążenie. Wartość musi być ≥ 0. Jeśli nie zostanie określona, maksymalne obciążenie nie będzie ograniczone przez tę wiadomość. Jeśli oba parametry są określone, wartość |
LoadCost
Koszt przeniesienia jednej jednostki ładunku w czasie Transition. W przypadku danego obciążenia koszt jest sumą 2 części:
- min(obciążenie,
loadThreshold) *costPerUnitBelowThreshold - max(0, obciążenie –
loadThreshold) *costPerUnitAboveThreshold
W przypadku tego kosztu rozwiązania preferują najpierw realizować żądania o wysokim priorytecie lub odbierać je na końcu. Jeśli na przykład pojazd ma
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
a jej trasa to start,pickup,pickup,delivery,delivery,end z przejściami:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
wtedy koszt poniesiony przez ten LoadCost wynosi (cost_below * load_below * kilometers + cost_above * load_above * kms).
- przejście 0: 0,0
- przejście 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- przejście 2: 2,0 * 15 * 1,0 + 10,0 * (20 – 15) * 1,0 = 80,0
- przejście 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- przejście 4: 0,0
W tym przypadku LoadCost na trasie wynosi 120,0.
Jeśli jednak trasa to start,pickup,delivery,pickup,delivery,end z przejściami:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
wtedy koszt poniesiony przez ten LoadCost wynosi
- przejście 0: 0,0
- przejście 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- przejście 2: 0,0
- przejście 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- przejście 4: 0,0
W tym przypadku LoadCost na trasie wynosi 40,0.
LoadCost sprawia, że rozwiązania z przejściami o dużym obciążeniu są droższe.
Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| Zapis JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Pola | |
|---|---|
loadThreshold |
Wartość obciążenia, powyżej której koszt przeniesienia jednostki obciążenia zmienia się z costPerUnitBelowThreshold na costPerUnitAboveThreshold. Musi być >= 0. |
costPerUnitBelowThreshold |
Koszt przeniesienia jednostki ładunku dla każdej jednostki w zakresie od 0 do wartości progowej. Musi to być wartość skończona i >= 0. |
costPerUnitAboveThreshold |
Koszt przeniesienia jednostki ładunku za każdą jednostkę powyżej progu. W przypadku specjalnym, gdy próg = 0, jest to stały koszt za jednostkę. Musi to być wartość skończona i >= 0. |
DurationLimit
Limit określający maksymalny czas trwania trasy pojazdu. Może być twarda lub miękka.
Jeśli zdefiniujesz pole limitu elastycznego, musisz określić zarówno próg maksymalny limitu elastycznego, jak i powiązany z nim koszt.
| Zapis JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Pola | |
|---|---|
maxDuration |
Limit bezwzględny ograniczający czas trwania do maksymalnie maxDuration. Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
softMaxDuration |
Miękki limit, który nie wymusza maksymalnego czasu trwania, ale po przekroczeniu powoduje naliczenie kosztu trasy. Ten koszt jest dodawany do innych kosztów zdefiniowanych w modelu, w tej samej jednostce. Jeśli wartość Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
quadraticSoftMaxDuration |
Miękki limit, który nie wymusza maksymalnego czasu trwania, ale w przypadku jego przekroczenia powoduje, że trasa generuje koszt proporcjonalny do kwadratu czasu trwania. Ten koszt jest dodawany do innych kosztów zdefiniowanych w modelu, w tej samej jednostce. Jeśli wartość
Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
costPerHourAfterSoftMax |
Koszt za godzinę w przypadku przekroczenia progu Koszt musi być nieujemny. |
costPerSquareHourAfterQuadraticSoftMax |
Koszt za godzinę kwadratową poniesiony w przypadku przekroczenia progu Jeśli czas trwania jest krótszy niż próg, dodatkowy koszt wynosi 0. W przeciwnym razie koszt zależy od czasu trwania w sposób opisany poniżej: Koszt musi być nieujemny. |
DistanceLimit
Limit określający maksymalną odległość, jaką można pokonać. Może być twarda lub miękka.
Jeśli zdefiniowano limit tymczasowy, musisz określić wartości softMaxMeters i costPerKilometerAboveSoftMax, które nie mogą być ujemne.
| Zapis JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Pola | |
|---|---|
maxMeters |
Limit bezwzględny ograniczający odległość do maksymalnie maxMeters. Limit nie może być liczbą ujemną. |
softMaxMeters |
Miękki limit, który nie wymusza maksymalnej odległości, ale w przypadku przekroczenia powoduje naliczenie kosztu, który jest dodawany do innych kosztów zdefiniowanych w modelu, w tej samej jednostce. Jeśli zdefiniowano parametr softMaxMeters, musi on być mniejszy niż maxMeters i nie może być ujemny. |
costPerKilometerBelowSoftMax |
Koszt na kilometr, który wzrasta do Ten koszt nie jest obsługiwany w regionie |
costPerKilometerAboveSoftMax |
Koszt za kilometr, jeśli odległość przekracza limit Koszt musi być nieujemny. |
BreakRule
Reguły generowania przerw w czasie pracy pojazdu (np. przerw na lunch). Przerwa to ciągły okres, w którym pojazd pozostaje w bezruchu w obecnej pozycji i nie może wykonać żadnej wizyty. Przerwa może wystąpić:
- podczas podróży między 2 wizytami (co obejmuje czas tuż przed wizytą lub tuż po niej, ale nie w trakcie wizyty), w którym to przypadku wydłuża odpowiedni czas przejazdu między wizytami;
- lub przed uruchomieniem pojazdu (pojazd nie może zostać uruchomiony w trakcie przerwy), w którym to przypadku nie ma wpływu na czas uruchomienia pojazdu.
- lub po zakończeniu przejazdu (analogicznie z godziną zakończenia przejazdu).
| Zapis JSON |
|---|
{ "breakRequests": [ { object ( |
| Pola | |
|---|---|
breakRequests[] |
Kolejność przerw. Zobacz komunikat |
frequencyConstraints[] |
Może obowiązywać kilka |
BreakRequest
Sekwencja przerw (czyli ich liczba i kolejność) obowiązująca w przypadku każdego pojazdu musi być znana z wyprzedzeniem. Powtarzające się symbole BreakRequest określają sekwencję w kolejności, w jakiej muszą wystąpić. Przedziały czasowe (earliestStartTime / latestStartTime) mogą się pokrywać, ale muszą być zgodne z zamówieniem (jest to sprawdzane).
| Zapis JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Pola | |
|---|---|
earliestStartTime |
Wymagane. Dolna granica (włącznie) początku przerwy. Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
latestStartTime |
Wymagane. Górna granica (włącznie) początku przerwy. Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
minDuration |
Wymagane. Minimalny czas trwania przerwy. Musi być dodatnia. Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
FrequencyConstraint
Można dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, wprowadzając minimalną częstotliwość przerw, np. „Co 12 godzin musi być przerwa trwająca co najmniej 1 godzinę”. Zakładając, że można to zinterpretować jako „W dowolnym 12-godzinnym przedziale czasu musi być co najmniej jedna przerwa trwająca co najmniej godzinę”, ten przykład można przetłumaczyć na następujący warunek FrequencyConstraint:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Czas i długość przerw w rozwiązaniu będą uwzględniać wszystkie te ograniczenia, a także okna czasowe i minimalne czasy trwania określone już w BreakRequest.
FrequencyConstraint może w praktyce dotyczyć przerw, które nie następują po sobie. Na przykład ten harmonogram uwzględnia przykład „1 godzina co 12 godzin”:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| Zapis JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| Pola | |
|---|---|
minBreakDuration |
Wymagane. Minimalny czas trwania przerwy w przypadku tego ograniczenia. Nieujemna. Zobacz opis Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
maxInterBreakDuration |
Wymagane. Maksymalny dozwolony czas trwania dowolnego przedziału czasu na trasie, który nie obejmuje co najmniej częściowo przerwy trwającej Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
Cel
Cele całkowicie zastępują model kosztów, dlatego są niezgodne z wcześniej ustalonymi kosztami. Każdy cel jest powiązany z określoną liczbą zdefiniowanych wcześniej kosztów, np. pojazdów, przesyłek lub atrybutów przejścia.
Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.
| Zapis JSON |
|---|
{
"type": enum ( |
| Pola | |
|---|---|
type |
Typ celu. |
weight |
Jak bardzo ten cel powinien się liczyć w porównaniu z innymi. Może to być dowolna liczba nieujemna. Wagi nie muszą sumować się do 1. Wagi domyślnie wynoszą 1,0. |
Typ
Typ celu, który zostanie przypisany do zestawu kosztów.
| Wartości w polu enum | |
|---|---|
DEFAULT |
Aby zapewnić rozsądne rozwiązanie, zostanie użyty domyślny zestaw kosztów. Uwaga: ten cel może być używany samodzielnie, ale jeśli nie jest jeszcze obecny, zawsze będzie dodawany z wagą 1,0 jako wartość bazowa do celów określonych przez użytkownika. |
MIN_DISTANCE |
cele „MIN”. zminimalizować całkowitą przebytą odległość; |
MIN_WORKING_TIME |
zminimalizować łączny czas pracy wszystkich pojazdów; |
MIN_TRAVEL_TIME |
Tak samo jak powyżej, ale z uwzględnieniem tylko czasu podróży. |
MIN_NUM_VEHICLES |
Zminimalizuj liczbę używanych pojazdów. |
DurationDistanceMatrix
Określa macierz czasu trwania i odległości od lokalizacji rozpoczęcia wizyty i pojazdu do lokalizacji zakończenia wizyty i pojazdu.
| Zapis JSON |
|---|
{
"rows": [
{
object ( |
| Pola | |
|---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Musi zawierać tyle elementów, ile pole |
vehicleStartTag |
Tag określający, do których pojazdów odnosi się ta macierz czasu trwania i odległości. Jeśli to pole jest puste, dotyczy wszystkich pojazdów i może zawierać tylko jedną macierz. Każdy początek podróży pojazdu musi pasować do dokładnie jednej macierzy, tzn. dokładnie jedno pole Wszystkie macierze muszą mieć inne wartości |
Wiersz
Określa wiersz macierzy czasu trwania i odległości.
| Zapis JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| Pola | |
|---|---|
durations[] |
Wartości czasu trwania w danym wierszu. Musi zawierać tyle elementów, ile pole Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
meters[] |
Wartości odległości dla danego wiersza. Jeśli w modelu nie ma kosztów ani ograniczeń związanych z odległościami, to pole może pozostać puste. W przeciwnym razie musi zawierać tyle elementów, ile wynosi wartość |
TransitionAttributes
Określa atrybuty przejść między 2 kolejnymi wizytami na trasie. Do tego samego przejścia może mieć zastosowanie kilka TransitionAttributes. W takim przypadku wszystkie dodatkowe koszty sumują się, a obowiązuje najsurowsze ograniczenie lub limit (zgodnie z naturalną semantyką „I”).
| Zapis JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Pola | |
|---|---|
srcTag |
Tagi określające zbiór przejść (src->dst), do których mają zastosowanie te atrybuty. Wizyta w źródle lub uruchomienie pojazdu są zgodne, jeśli ich pole |
excludedSrcTag |
Zobacz |
dstTag |
Wizyta w miejscu docelowym lub zakończenie podróży pojazdem są zgodne, jeśli ich pole |
excludedDstTag |
Zobacz |
cost |
Określa koszt wykonania tego przejścia. Jest to ta sama jednostka co wszystkie inne koszty w modelu i nie może być ujemna. Jest ona doliczana do wszystkich innych istniejących kosztów. |
costPerKilometer |
Określa koszt za kilometr stosowany do odległości pokonanej podczas wykonywania tej zmiany. Może się sumować z dowolną wartością |
distanceLimit |
Określa limit odległości pokonanej podczas tego przejścia. Od czerwca 2021 r. obsługiwane są tylko limity elastyczne. |
delay |
Określa opóźnienie występujące podczas wykonywania tego przejścia. To opóźnienie zawsze występuje po zakończeniu wizyty w źródle i przed rozpoczęciem wizyty w miejscu docelowym. Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
ShipmentTypeIncompatibility
Określa niezgodności między przesyłkami w zależności od ich typu. Wyświetlanie niezgodnych przesyłek na tej samej trasie jest ograniczone w zależności od trybu niezgodności.
| Zapis JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Pola | |
|---|---|
types[] |
Lista niezgodnych typów. Dwie przesyłki o różnych wartościach |
incompatibilityMode |
Tryb zastosowany w przypadku niezgodności. |
IncompatibilityMode
Tryby określające, jak wygląd niezgodnych przesyłek jest ograniczony na tej samej trasie.
| Wartości w polu enum | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Nieokreślony tryb niezgodności. Tej wartości nie należy nigdy używać. |
NOT_PERFORMED_BY_SAME_VEHICLE |
W tym trybie 2 przesyłki o niezgodnych typach nigdy nie mogą być przewożone tym samym pojazdem. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
W tym trybie 2 przesyłki o niezgodnych typach nigdy nie mogą znajdować się w tym samym pojeździe w tym samym czasie:
|
ShipmentTypeRequirement
Określa wymagania dotyczące przesyłek na podstawie ich typu (shipmentType). Szczegóły wymagania są określone przez tryb wymagania.
| Zapis JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Pola | |
|---|---|
requiredShipmentTypeAlternatives[] |
Lista alternatywnych typów dostawy wymaganych przez |
dependentShipmentTypes[] |
Wszystkie przesyłki z typem w polu UWAGA: łańcuchy wymagań, w których |
requirementMode |
Tryb zastosowany do wymagania. |
RequirementMode
Tryby określające wygląd przesyłek zależnych na trasie.
| Wartości w polu enum | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Nieokreślony tryb wymagania. Tej wartości nie należy nigdy używać. |
PERFORMED_BY_SAME_VEHICLE |
W tym trybie wszystkie przesyłki „zależne” muszą być przewożone tym samym pojazdem co co najmniej jedna z przesyłek „wymaganych”. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
W trybie Odbiór przesyłki „zależnej” musi zatem mieć:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Tak jak wcześniej, z tym że w momencie dostawy przesyłki „zależne” muszą mieć w pojeździe przesyłkę „wymaganą”. |
PrecedenceRule
Reguła pierwszeństwa między 2 zdarzeniami (każde zdarzenie to odbiór lub dostawa przesyłki): „drugie” zdarzenie musi się rozpocząć co najmniej offsetDuration po rozpoczęciu „pierwszego”.
Kilka precedensów może odnosić się do tych samych (lub powiązanych) zdarzeń, np. „odbiór B następuje po dostawie A” i „odbiór C następuje po odbiorze B”.
Ponadto pierwszeństwo ma zastosowanie tylko wtedy, gdy obie przesyłki są realizowane, a w przeciwnym razie jest ignorowane.
| Zapis JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Pola | |
|---|---|
firstIsDelivery |
Wskazuje, czy zdarzenie „first” jest dostawą. |
secondIsDelivery |
Wskazuje, czy „drugie” zdarzenie to dostawa. |
offsetDuration |
Przesunięcie między zdarzeniem „pierwszym” a „drugim”. Może być ujemna. Czas trwania w sekundach z maksymalnie 9 miejscami po przecinku, zakończony znakiem „ |
firstIndex |
Indeks przesyłki „pierwszego” zdarzenia. To pole musi być określone. |
secondIndex |
Indeks przesyłki „drugiego” zdarzenia. To pole musi być określone. |