- Zapis JSON
- Shipment
- VisitRequest
- LatLng
- Waypoint
- Lokalizacja
- TimeWindow
- Pojazd
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interwał
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Cel
- Typ
- DurationDistanceMatrix
- Wiersz
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Model dostawy zawiera zestaw dostaw, które muszą zostać zrealizowane przez zestaw pojazdów, przy jednoczesnym zminimalizowaniu ogólnego kosztu, który jest sumą:
- koszt wyznaczania tras pojazdów (suma kosztu za łączny czas, kosztu za czas podróży i kosztu stałego dla wszystkich pojazdów).
- kary za niezrealizowaną dostawę.
- koszt globalnego czasu dostawy przesyłek,
| Zapis JSON |
|---|
{ "shipments": [ { object ( |
| Pola | |
|---|---|
shipments[] |
Zbiór przesyłek, które muszą zostać zrealizowane w modelu. |
vehicles[] |
Zbiór pojazdów, które mogą być używane do wykonywania wizyt. |
objectives[] |
Zestaw celów dla tego modelu, które przekształcimy w koszty. Jeśli nie jest pusty, model wejściowy musi być bezpłatny. Aby uzyskać zmodyfikowane żądanie, użyj 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: żaden czas spoza tego zakresu nie może być uznany za prawidłowy. Przedział czasu modelu musi być krótszy niż rok, tzn. 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 jest ustawiona, domyślnie używana jest godzina 00:00:00 czasu UTC, 1 stycznia 1971 r. (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śniejszym faktycznym czasem rozpoczęcia a najpóźniejszym faktycznym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać koszt za godzinę do tej ilości, aby na przykład spróbować zoptymalizować zadanie pod kątem jak najszybszego ukończenia. Ten 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 z Map Google lub odległości geodezyjne, w zależności od wartości pola Przykłady użycia:
|
durationDistanceMatrixSrcTags[] |
Tagi definiujące źródła macierzy czasu trwania i macierzy odległości; Tagi odpowiadają |
durationDistanceMatrixDstTags[] |
Tagi definiujące miejsca docelowe macierzy czasu trwania i macierzy odległości; Tagi odpowiadają |
transitionAttributes[] |
Do modelu dodano atrybuty przejścia. |
shipmentTypeIncompatibilities[] |
Zbiory niezgodnych typów przesyłek (patrz |
shipmentTypeRequirements[] |
Zestawy wymagań |
precedenceRules[] |
Zbiór reguł pierwszeństwa, które muszą być egzekwowane w modelu. WAŻNE: użycie 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 jego trasa obejmuje co najmniej 1 przesyłkę. Można go użyć do ograniczenia liczby tras w przypadku, gdy jest mniej kierowców niż pojazdów, a flota pojazdów jest niejednorodna. Optymalizacja wybierze najlepszy podzbiór pojazdów do użycia. Musi być liczbą dodatnią. |
Wysyłka
Dostawa pojedynczego produktu, od jednego z miejsc odbioru do jednego z miejsc dostawy. Aby przesyłka została uznana za zrealizowaną, unikalny pojazd musi odwiedzić jedną z jej lokalizacji odbioru (i odpowiednio zmniejszyć swoje wolne miejsce), a następnie odwiedzić jedną z jej lokalizacji dostawy (i odpowiednio zwiększyć swoje wolne miejsce).
| Zapis JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Pola | |
|---|---|
displayName |
Zdefiniowana przez użytkownika wyświetlana nazwa 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 zostanie określony, pojazd musi tylko odwiedzić lokalizację odpowiadającą dostawom. |
deliveries[] |
Zestaw alternatywnych opcji dostawy powiązanych z przesyłką. Jeśli nie zostanie określona, pojazd musi odwiedzić tylko lokalizację odpowiadającą odbiorom. |
loadDemands |
Wymagania dotyczące ładunku przesyłki (np. waga, objętość, liczba palet itp.). Klucze na 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 dany klucz nie pojawia się na mapie, odpowiednie obciążenie jest traktowane jako null. |
allowedVehicleIndices[] |
Zestaw pojazdów, które mogą zrealizować tę przesyłkę. Jeśli to pole jest puste, wszystkie pojazdy mogą wykonać to zadanie. Pojazdy są podawane według indeksu na liście |
costsPerVehicle[] |
Określa koszt ponoszony, gdy ta przesyłka jest dostarczana przez każdy pojazd. Jeśli jest określony, musi mieć JEDNĄ z tych wartości:
Te koszty muszą być podane w tej samej jednostce co |
costsPerVehicleIndices[] |
Indeksy pojazdów, których dotyczy |
pickupToDeliveryAbsoluteDetourLimit |
Określa maksymalny bezwzględny czas objazdu w porównaniu z najkrótszą trasą od odbioru do dostawy. Jeśli jest określona, musi być nieujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Załóżmy na przykład, że t to najkrótszy czas potrzebny na przejazd z wybranej alternatywy odbioru bezpośrednio do wybranej alternatywy dostawy. Ustawienie Jeśli dla tej samej przesyłki określono zarówno limity względne, jak i bezwzględne, dla każdej możliwej pary odbiór/dostawa 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. |
pickupToDeliveryTimeLimit |
Określa maksymalny czas od rozpoczęcia odbioru do rozpoczęcia dostawy przesyłki. Jeśli jest określona, musi być nieujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Nie zależy to od tego, które alternatywy zostały wybrane do odbioru i dostawy, ani od prędkości pojazdu. Można to określić razem z ograniczeniami maksymalnego objazdu – rozwiązanie będzie uwzględniać obie specyfikacje. |
shipmentType |
Niepusty ciąg znaków określający „typ” tej przesyłki. Ta funkcja może służyć do definiowania niezgodności lub wymagań między Różni się od pola |
label |
Określa etykietę tej przesyłki. Ta etykieta jest raportowana w odpowiedzi w polu |
ignore |
Jeśli ma wartość prawda, pomiń tę przesyłkę, ale nie stosuj kary Zignorowanie dostawy powoduje błąd weryfikacji, gdy w modelu występują elementy typu Ignorowanie dostawy, która jest realizowana w |
penaltyCost |
Jeśli dostawa nie zostanie zrealizowana, ta kara zostanie dodana do łącznego kosztu tras. Przesyłka jest uznawana za zrealizowaną, jeśli odwiedzono jeden z alternatywnych punktów odbioru i dostawy. Koszt może być wyrażony w tej samej jednostce, która jest używana we wszystkich innych polach związanych z kosztami w modelu, i musi być dodatni. WAŻNE: jeśli ta kara nie jest określona, jest uważana za nieskończoną, tzn. dostawa musi zostać zrealizowana. |
pickupToDeliveryRelativeDetourLimit |
Określa maksymalny względny czas objazdu w porównaniu z najkrótszą trasą od odbioru do dostawy. Jeśli jest określona, musi być nieujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Załóżmy na przykład, że t to najkrótszy czas potrzebny na przejazd z wybranej alternatywy odbioru bezpośrednio do wybranej alternatywy dostawy. Ustawienie Jeśli dla tej samej przesyłki określono zarówno limity względne, jak i bezwzględne, dla każdej możliwej pary odbiór/dostawa 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że wykonać pojazd: ma geolokalizację (lub 2, patrz poniżej), godziny otwarcia i zamknięcia reprezentowane przez okna czasowe oraz czas trwania usługi (czas spędzony przez pojazd po przybyciu w celu odbioru lub dostarczenia towarów).
| Zapis JSON |
|---|
{ "arrivalLocation": { object ( |
| Pola | |
|---|---|
arrivalLocation |
Geolokalizacja, do której pojazd dociera podczas wykonywania tego działania ( |
arrivalWaypoint |
Punkt, do którego pojazd dociera podczas wykonywania tego działania ( |
departureLocation |
Lokalizacja geograficzna, z której pojazd odjeżdża po zakończeniu tego zadania ( |
departureWaypoint |
Punkt na trasie, z którego pojazd odjeżdża po zakończeniu tego zadania ( |
tags[] |
Określa tagi dołączone do prośby o wizytę. Puste lub zduplikowane ciągi znaków są niedozwolone. |
timeWindows[] |
Przedziały czasu, które ograniczają czas przybycia na wizytę. 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 pola Przedziały czasu muszą być rozłączne, tzn.żaden przedział czasu nie może nakładać się na inny ani z nim sąsiadować. Muszą być też podane w kolejności rosnącej. Wartości |
duration |
Czas trwania wizyty, czyli czas spędzony przez pojazd między przyjazdem a odjazdem (należy dodać do możliwego czasu oczekiwania; patrz |
cost |
Koszt obsługi tej prośby o wizytę na trasie pojazdu. Można go użyć do opłacenia różnych kosztów za każdą alternatywną opcję odbioru lub dostawy przesyłki. Ten koszt musi być podany w tej samej jednostce co |
loadDemands |
Wczytaj wymagania dotyczące tej prośby o wizytę. To pole jest podobne do pola |
visitTypes[] |
Określa typy wizyt. Można go użyć do przydzielenia dodatkowego czasu wymaganego do zrealizowania wizyty przez pojazd (patrz Typ może pojawić się tylko raz. |
label |
Określa etykietę dla tego elementu: |
avoidUTurns |
Określa, czy na trasach dojazdu w tej lokalizacji należy unikać zawracania. Unikanie zawracania jest realizowane w miarę możliwości i nie gwarantujemy, że uda się całkowicie uniknąć takich manewrów. To funkcja eksperymentalna, której działanie może ulec zmianie. Funkcja eksperymentalna: 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ę współrzędnych szerokości i długości geograficznej. Jest ona wyrażona jako 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 [-90,0, +90,0]. |
longitude |
Długość geograficzna w stopniach. Musi mieścić się w zakresie [-180.0, +180.0]. |
Punkt pośredni
Hermetyzuje punkt na trasie. Punkty pośrednie oznaczają lokalizacje przyjazdu i odjazdu w przypadku żądań wizyty oraz lokalizacje początkowe i końcowe pojazdów.
| Zapis JSON |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| Pola | |
|---|---|
sideOfRoad |
Opcjonalnie: Wskazuje, że lokalizacja tego punktu na trasie ma preferować zatrzymanie pojazdu po określonej stronie drogi. Gdy ustawisz tę wartość, trasa będzie przebiegać przez lokalizację, dzięki czemu pojazd będzie mógł zatrzymać się po tej stronie drogi, po której znajduje się lokalizacja. Ta opcja nie działa w przypadku trybu podróży „WALKING”. |
vehicleStopover |
Wskazuje, że punkt pośredni jest przeznaczony dla pojazdów, które mają się zatrzymać, aby odebrać lub wysadzić pasażera. Ta opcja działa tylko w trybie podróży „DRIVING” i gdy „locationType” to „location”. Eksperymentalne: działanie lub obecność tego pola może się zmienić w przyszłości. |
| Różne sposoby reprezentowania lokalizacji. Poniżej znajduje się lista pól, które wzajemnie się wykluczają. W odpowiedzi zostanie ustawione co najwyżej jedno z tych pól: | |
location |
Punkt określony za pomocą współrzędnych geograficznych, w tym opcjonalnego nagłówka. |
placeId |
Identyfikator miejsca POI powiązany z punktem na trasie. Jeśli używasz identyfikatora miejsca do określenia lokalizacji przyjazdu lub odjazdu w 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ę nie jest zalecany. |
| Koniec pól wykluczających się wzajemnie. | |
Lokalizacja
Zawiera lokalizację (punkt geograficzny i opcjonalny nagłówek).
| Zapis JSON |
|---|
{
"latLng": {
object ( |
| Pola | |
|---|---|
latLng |
Współrzędne geograficzne punktu na trasie. |
heading |
Kierunek kompasu powiązany z kierunkiem ruchu. Ta wartość służy do określenia strony drogi, po której ma nastąpić odbiór i wysadzenie pasażera. Wartości kierunku mogą wynosić od 0 do 360, gdzie 0 oznacza kierunek na północ, 90 – na wschód itd. |
TimeWindow
Okna czasowe ograniczają czas zdarzenia, np. czas przybycia na wizytę lub czas rozpoczęcia i zakończenia trasy pojazdu.
Sztywne granice przedziału czasu, startTime i endTime, wymuszają najwcześniejszy i najpóźniejszy czas zdarzenia, tak aby startTime <= event_time <=
endTime. Dolna granica elastycznego okna czasowego, softStartTime, wyraża preferencję, aby zdarzenie miało miejsce o softStartTime lub później, przez naliczenie kosztu proporcjonalnego do czasu, jaki upłynął przed wystąpieniem zdarzenia softStartTime. Górna granica elastycznego okna czasowego, softEndTime, wyraża preferencję, aby zdarzenie miało miejsce o softEndTime lub wcześniej, przez naliczenie kosztu proporcjonalnego do czasu, jaki upłynął od softEndTime do wystąpienia zdarzenia. startTime, endTime, softStartTime i softEndTime powinny mieścić się w globalnych limitach czasu (patrz ShipmentModel.global_start_time i ShipmentModel.global_end_time) i powinny uwzględniać:
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 sztywnego przedziału czasu. Jeśli nie zostanie określony, zostanie ustawiony 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 |
Czas zakończenia sztywnego przedziału czasu. Jeśli nie zostanie określony, zostanie ustawiony 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 „miękkiego” okna czasowego. 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 |
Miękki czas 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ę dodawany do innych kosztów w modelu, jeśli zdarzenie występuje przed czasem softStartTime, obliczany w ten sposób: Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono softStartTime. |
costPerHourAfterSoftEndTime |
Koszt za godzinę dodawany do innych kosztów w modelu, jeśli zdarzenie występuje po Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono |
Pojazd
Modeluje pojazd w problemie z wysył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 |
Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. 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, i jego prędkość. Zobacz też |
routeModifiers |
Zbiór warunków, które należy spełnić, wpływających na sposób obliczania tras dla danego pojazdu. |
startLocation |
Położenie geograficzne, w którym pojazd zaczyna trasę, zanim odbierze przesyłki. Jeśli nie zostanie określona, pojazd rozpocznie trasę od pierwszego odbioru. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić parametru |
startWaypoint |
Punkt pośredni reprezentujący położenie geograficzne, w którym pojazd zaczyna trasę, zanim odbierze przesyłki. Jeśli nie określono ani |
endLocation |
Położenie geograficzne, w którym pojazd kończy ostatni przejazd |
endWaypoint |
Punkt na trasie reprezentujący położenie geograficzne, w którym pojazd kończy jazdę po zakończeniu ostatniego zadania ( |
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[] |
Okna czasowe, w których pojazd może opuścić lokalizację początkową. Muszą mieścić się w globalnych limitach czasu (patrz pola Okna czasowe należące do tego samego pola powtarzanego muszą być rozłączne, tzn. żadne okno czasowe nie może nakładać się na inne ani z nim sąsiadować, i muszą być uporządkowane chronologicznie. Wartości |
endTimeWindows[] |
Przedziały czasu, w których pojazd może dotrzeć do lokalizacji końcowej. Muszą mieścić się w globalnych limitach czasu (patrz pola Okna czasowe należące do tego samego pola powtarzanego muszą być rozłączne, tzn. żadne okno czasowe nie może nakładać się na inne ani z nim sąsiadować, i muszą być uporządkowane chronologicznie. Wartości |
unloadingPolicy |
Zasada rozładunku obowiązująca w pojeździe. |
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 za godzinę trasy pojazdu. Ten koszt jest stosowany do łącznego czasu trwania trasy i obejmuje czas podróży, czas oczekiwania i czas wizyty. Użycie |
costPerTraveledHour |
Koszt godziny podróży na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży na trasie (czyli czasu podanego w polu |
costPerKilometer |
Koszt za kilometr trasy pojazdu. Ten koszt jest stosowany do odległości podanej w polu |
fixedCost |
Stały koszt stosowany, jeśli ten pojazd jest używany do obsługi przesyłki. |
usedIfRouteIsEmpty |
To pole dotyczy tylko pojazdów, których trasa nie obejmuje żadnych przesyłek. Wskazuje, czy w tym przypadku pojazd powinien być uznawany za używany. Jeśli ma wartość „true”, pojazd jedzie 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 podróży z lokalizacji początkowej do końcowej są brane pod uwagę. W przeciwnym razie nie przemieszcza się z lokalizacji początkowej do końcowej i nie są dla niego planowane żadne |
routeDurationLimit |
Limit stosowany do łącznego czasu trwania trasy pojazdu. W danym |
travelDurationLimit |
Limit stosowany do czasu podróży na trasie pojazdu. W danym |
routeDistanceLimit |
Limit zastosowany do łącznej odległości trasy pojazdu. W danym |
extraVisitDurationForVisitType |
Określa mapowanie ciągów znaków visitTypes na czas trwania. Czas trwania to czas dodatkowy do Jeśli prośba o wizytę ma kilka typów, na mapie zostanie dodany czas trwania dla każdego typu. |
breakRule |
Opisuje harmonogram przerw, który ma być stosowany w tym pojeździe. Jeśli pole jest puste, dla tego pojazdu nie zostaną zaplanowane żadne przerwy. |
label |
Określa etykietę tego pojazdu. Ta etykieta jest raportowana w odpowiedzi jako |
ignore |
Jeśli ma wartość true, parametr Jeśli przesyłka jest realizowana przez ignorowany pojazd w Jeśli przesyłka jest realizowana przez ignorowany pojazd w |
travelDurationMultiple |
Określa współczynnik, który można wykorzystać do zwiększenia lub zmniejszenia czasu podróży tego pojazdu. Na przykład ustawienie wartości 2,0 oznacza, że pojazd jest wolniejszy, a czas podróży jest 2 razy dłuższy niż w przypadku standardowych pojazdów. Ta wielokrotność nie ma wpływu na czas trwania wizyt. Ma to wpływ na koszt, jeśli określono OSTRZEŻENIE: czasy podróży zostaną zaokrąglone do najbliższej sekundy po zastosowaniu tej wielokrotności, ale przed wykonaniem jakichkolwiek operacji numerycznych, więc mała wielokrotność może spowodować utratę precyzji. Zobacz też |
TravelMode
Środki transportu, z których mogą korzystać pojazdy.
Powinien to być podzbiór środków transportu dostępnych w interfejsie Routes API Google Maps Platform. Więcej informacji znajdziesz na stronie https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode.
Uwaga: trasy WALKING są w wersji beta i czasami mogą nie uwzględniać 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 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 trasie pieszej. |
TWO_WHEELER |
Dwukołowy pojazd silnikowy. Na przykład motocykl. Pamiętaj, że różni się on od trybu BICYCLING, który obejmuje tryb napędzany siłą mięśni. Ten tryb podróży jest obsługiwany tylko w krajach wymienionych w artykule Kraje i regiony, w których obsługiwane są pojazdy dwukołowe. |
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 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 miarę możliwości unikać dróg płatnych. Preferowane będą trasy, które nie zawierają dróg płatnych. Dotyczy tylko zmotoryzowanych środków transportu. |
avoidHighways |
Określa, czy w miarę możliwości unikać autostrad. Preferowane będą trasy, które nie obejmują autostrad. Dotyczy 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 tylko zmotoryzowanych środków transportu. |
avoidIndoor |
Opcjonalnie: Określa, czy w miarę możliwości unikać nawigacji w budynkach. Preferowane będą trasy, które nie zawierają nawigacji wewnątrz budynków. Dotyczy tylko trybu podróży |
UnloadingPolicy
Zasady dotyczące sposobu rozładunku pojazdu. Dotyczy tylko przesyłek, które mają zarówno odbiór, jak i dostawę.
Inne przesyłki mogą być dostarczane w dowolnym miejscu na trasie niezależnie od przesyłki unloadingPolicy.
| Wartości w polu enum | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Nieokreślona zasada rozładunku; dostawy muszą być realizowane po odpowiadających im odbiorach. |
LAST_IN_FIRST_OUT |
Dostawy muszą być realizowane w odwrotnej kolejności niż odbiory |
FIRST_IN_FIRST_OUT |
Dostawy muszą odbywać się w tej samej kolejności co odbiory |
LoadLimit
Określa limit obciążenia pojazdu, np. „ta ciężarówka 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 na trasie tego pojazdu przekroczy |
startLoadInterval |
Dopuszczalny przedział obciążenia pojazdu na początku trasy. |
endLoadInterval |
Dopuszczalny przedział obciążenia pojazdu na końcu trasy. |
maxLoad |
Maksymalna dopuszczalna wielkość obciążenia. |
costPerKilometer |
Koszt przemieszczenia 1 jednostki ładunku na odległość 1 kilometra tym pojazdem. Można go używać jako wskaźnika zużycia 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 przez godzinę 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ł akceptowalnych wartości obciążenia.
| Zapis JSON |
|---|
{ "min": string, "max": string } |
| Pola | |
|---|---|
min |
Minimalne akceptowalne obciążenie. Musi być ≥ 0. Jeśli podano obie wartości, |
max |
Maksymalne dopuszczalne obciążenie. Musi być ≥ 0. Jeśli nie zostanie określone, maksymalne obciążenie nie będzie ograniczone przez tę wiadomość. Jeśli podano obie wartości, |
LoadCost
Koszt przeniesienia 1 jednostki obciążenia w ciągu Transition. W przypadku danego obciążenia koszt jest sumą 2 części:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
Przy tym koszcie rozwiązania wolą najpierw dostarczać duże zapotrzebowanie lub, co jest równoważne, odbierać duże zapotrzebowanie 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,odbiór,odbiór,dostawa,dostawa,koniec 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 }
to koszt poniesiony przez ten pojazd LoadCost wynosi (cost_below * load_below * kilometry + cost_above * load_above * kilometry)
- 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
Wartość LoadCost na trasie wynosi więc 120,0.
Jeśli jednak trasa to początek, odbiór, dostawa, odbiór, dostawa, koniec 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 }
to koszt poniesiony przez ten element 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 wartość LoadCost na trasie wynosi 40,0.
LoadCost sprawia, że rozwiązania z dużą liczbą przejść 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 |
Ilość ładunku, powyżej której koszt przeniesienia jednostki ładunku zmienia się z costPerUnitBelowThreshold na costPerUnitAboveThreshold. Musi być większa lub równa 0. |
costPerUnitBelowThreshold |
Koszt przeniesienia jednostki ładunku dla każdej jednostki między 0 a progiem. Musi być wartością skończoną i większą lub równą 0. |
costPerUnitAboveThreshold |
Koszt przeniesienia jednostki ładunku dla każdej jednostki powyżej progu. W szczególnym przypadku, gdy próg = 0, jest to stały koszt jednostkowy. Musi być wartością skończoną i większą lub równą 0. |
DurationLimit
Limit określający maksymalny czas trwania trasy pojazdu. Może być twardy lub miękki.
Jeśli zdefiniowane jest pole limitu miękkiego, należy zdefiniować zarówno próg maksymalny, jak i powiązany z nim koszt.
| Zapis JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Pola | |
|---|---|
maxDuration |
Ścisły limit ograniczający czas trwania do maksymalnie maxDuration. |
softMaxDuration |
Limit miękki nie wymusza maksymalnego limitu czasu trwania, ale jego przekroczenie powoduje, że trasa generuje koszt. Ten koszt jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką. Jeśli podasz właściwość |
quadraticSoftMaxDuration |
Limit miękki nie wymusza maksymalnego limitu czasu trwania, ale gdy zostanie naruszony, trasa generuje koszt, który jest kwadratem czasu trwania. Ten koszt jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką. Jeśli ustawiono
|
costPerHourAfterSoftMax |
Koszt za godzinę naliczany w przypadku przekroczenia progu Koszt nie może być ujemny. |
costPerSquareHourAfterQuadraticSoftMax |
Koszt za godzinę kwadratową naliczany 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 następujący sposób: Koszt nie może być ujemny. |
DistanceLimit
Limit określający maksymalną odległość, jaką można przebyć. Może być twardy lub miękki.
Jeśli zdefiniowano limit miękki, należy zdefiniować zarówno softMaxMeters, jak i costPerKilometerAboveSoftMax, i muszą one być nieujemne.
| Zapis JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Pola | |
|---|---|
maxMeters |
Ścisły limit ograniczający odległość do maksymalnie maxMeters. Limit nie może być liczbą ujemną. |
softMaxMeters |
Limit miękki nie wymusza maksymalnego limitu odległości, ale jego naruszenie powoduje naliczenie kosztu, który jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką. Jeśli zdefiniowano parametr softMaxMeters, musi on być mniejszy niż maxMeters i nieujemny. |
costPerKilometerBelowSoftMax |
Koszt poniesiony na kilometr, który wzrasta do Ten koszt nie jest obsługiwany w: |
costPerKilometerAboveSoftMax |
Koszt za kilometr naliczany, jeśli odległość przekracza limit Koszt nie może być ujemny. |
BreakRule
Reguły generowania przerw dla pojazdu (np. przerw na lunch). Przerwa to ciągły okres, podczas którego pojazd pozostaje bezczynny w obecnej pozycji i nie może wykonywać żadnych wizyt. 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 jej trakcie) – w takim przypadku wydłuża odpowiedni czas przejazdu między wizytami;
- lub przed rozpoczęciem pracy pojazdu (pojazd nie może rozpocząć pracy w środku przerwy), w którym to przypadku nie ma wpływu na czas rozpoczęcia pracy pojazdu.
- lub po zakończeniu jazdy (podobnie, z godziną zakończenia jazdy).
| Zapis JSON |
|---|
{ "breakRequests": [ { object ( |
| Pola | |
|---|---|
breakRequests[] |
Sekwencja przerw. Zobacz wiadomość |
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 góry. Powtarzające się pola BreakRequest definiują tę sekwencję w kolejności, w jakiej muszą wystąpić. Ich przedziały czasowe (earliestStartTime / latestStartTime) mogą się nakładać, 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. Wartość musi być dodatnia. |
FrequencyConstraint
Można dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, wymuszają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 interpretować jako „W dowolnym przedziale czasowym wynoszącym 12 godzin musi być co najmniej 1 przerwa trwająca co najmniej 1 godzinę”, ten przykład można przełożyć na następujący obiekt FrequencyConstraint:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Czas i czas trwania przerw w rozwiązaniu będą uwzględniać wszystkie te ograniczenia, a także przedziały czasowe i minimalne czasy trwania określone już w BreakRequest.
W praktyce FrequencyConstraint może dotyczyć przerw, które nie następują po sobie. Na przykład ten harmonogram jest zgodny z przykładem „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 dla tego ograniczenia. Nieujemna. Zobacz opis miejsca |
maxInterBreakDuration |
Wymagane. Maksymalny dozwolony czas trwania dowolnego przedziału czasu na trasie, który nie obejmuje przynajmniej częściowo przerwy wynoszącej |
Cel
Cele całkowicie zastępują model kosztów, dlatego są niezgodne z dotychczasowymi kosztami. Każdy cel jest mapowany na szereg wstępnie zdefiniowanych 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, a wagi nie muszą sumować się do 1. Domyślna wartość wag to 1,0. |
Typ
Typ celu, który zostanie zmapowany na zestaw 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 zawsze będzie też dodawany z wagą 1,0 jako punkt odniesienia do celów określonych przez użytkownika, jeśli nie został jeszcze dodany. |
MIN_DISTANCE |
„MIN”. Zminimalizuj całkowitą przebytą odległość. |
MIN_WORKING_TIME |
Zminimalizuj łączny czas pracy wszystkich pojazdów. |
MIN_TRAVEL_TIME |
Jak wyżej, ale skupiając się tylko na czasie podróży. |
MIN_NUM_VEHICLES |
Zminimalizuj liczbę używanych pojazdów. |
DurationDistanceMatrix
Określa macierz czasu trwania i macierz odległości od lokalizacji wizyty i punktu początkowego pojazdu do lokalizacji wizyty i punktu końcowego pojazdu.
| Zapis JSON |
|---|
{
"rows": [
{
object ( |
| Pola | |
|---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Musi zawierać tyle samo elementów co |
vehicleStartTag |
Tag określający, do których pojazdów ma zastosowanie ta macierz czasu trwania i odległości. Jeśli to pole jest puste, dotyczy wszystkich pojazdów i może istnieć tylko jedna macierz. Każdy punkt początkowy pojazdu musi pasować do dokładnie jednej macierzy, tzn. dokładnie jedno pole Wszystkie macierze muszą mieć różne 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 dla danego wiersza. Musi zawierać tyle samo elementów co |
meters[] |
Wartości odległości dla danego wiersza. Jeśli żadne koszty ani ograniczenia nie odnoszą się do odległości w modelu, to pole może pozostać puste. W przeciwnym razie musi zawierać tyle elementów co |
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 są sumowane i obowiązuje najbardziej rygorystyczne ograniczenie lub limit (zgodnie z naturalną semantyką „ORAZ”).
| Zapis JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Pola | |
|---|---|
srcTag |
Tagi definiujące zestaw przejść (src->dst), do których mają zastosowanie te atrybuty. Wizyta źródłowa lub początek pojazdu pasuje, jeśli |
excludedSrcTag |
Zobacz |
dstTag |
Wizyta w miejscu docelowym lub zakończenie trasy pojazdu pasuje, jeśli |
excludedDstTag |
Zobacz |
cost |
Określa koszt wykonania tego przejścia. Jest ona wyrażona w tej samej jednostce co wszystkie inne koszty w modelu i nie może być ujemna. Jest on stosowany oprócz wszystkich innych istniejących kosztów. |
costPerKilometer |
Określa koszt za kilometr stosowany do odległości przebytej podczas wykonywania tego przejścia. Suma obejmuje wszystkie wartości |
distanceLimit |
Określa limit odległości przebytej podczas tego przejścia. Od czerwca 2021 r. obsługiwane są tylko limity miękkie. |
delay |
Określa opóźnienie podczas wykonywania tego przejścia. To opóźnienie zawsze występuje po zakończeniu wizyty źródłowej i przed rozpoczęciem wizyty docelowej. |
ShipmentTypeIncompatibility
Określa niezgodności między przesyłkami w zależności od ich typu shipmentType. Wyświetlanie niezgodnych przesyłek na tej samej trasie jest ograniczone na podstawie trybu niezgodności.
| Zapis JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Pola | |
|---|---|
types[] |
Lista niezgodnych typów. Dwie przesyłki, które mają różne wartości |
incompatibilityMode |
Tryb zastosowany do niezgodności. |
IncompatibilityMode
Tryby określające, jak ograniczane jest występowanie niezgodnych przesyłek na tej samej trasie.
| Wartości w polu enum | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Nieokreślony tryb niezgodności. Ta wartość nie powinna być nigdy używana. |
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 między przesyłkami na podstawie ich typu shipmentType. Szczegóły wymagania są określane przez tryb wymagania.
| Zapis JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Pola | |
|---|---|
requiredShipmentTypeAlternatives[] |
Lista alternatywnych typów przesyłek 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 wymagań. Ta wartość nie powinna być nigdy używana. |
PERFORMED_BY_SAME_VEHICLE |
W tym trybie wszystkie „zależne” przesyłki muszą być przewożone tym samym pojazdem co co najmniej jedna z „wymaganych” przesyłek. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
W trybie Dlatego „zależny” odbiór przesyłki musi mieć:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Tak samo jak wcześniej, z tym że „zależne” przesyłki muszą mieć „wymaganą” przesyłkę w pojeździe w momencie dostawy. |
PrecedenceRule
Reguła pierwszeństwa między 2 zdarzeniami (każde zdarzenie to odbiór lub dostawa przesyłki): „drugie” zdarzenie musi rozpocząć się co najmniej offsetDuration po rozpoczęciu „pierwszego”.
Kilka reguł pierwszeństwa 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 obowiązuje 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 „pierwsze” zdarzenie to dostawa. |
secondIsDelivery |
Wskazuje, czy „drugie” zdarzenie to dostawa. |
offsetDuration |
Przesunięcie między „pierwszym” a „drugim” zdarzeniem. Może być ujemna. |
firstIndex |
Indeks przesyłki „pierwszego” zdarzenia. To pole musi być określone. |
secondIndex |
Indeks przesyłki „drugiego” zdarzenia. To pole musi być określone. |