ShipmentRoute

Bir aracın rotası, zaman ekseni boyunca şu şekilde ayrıştırılabilir (n ziyaret olduğu varsayılır):

  |            |            |          |       |  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

Aşağıdaki durumlar arasında ayrım yaptığımızı unutmayın:

  • Aracın başlangıcı ve bitişi ile her ziyaretin başlangıcı ve bitişi (varış ve ayrılış olarak da bilinir) gibi "dakik etkinlikler". Belirli bir saniyede gerçekleşirler.
  • Ziyaretlerin kendisi ve ziyaretler arasındaki geçiş gibi "zaman aralıkları". Zaman aralıkları bazen sıfır süreli olabilir (ör. aynı saniyede başlayıp biter) ancak genellikle pozitif sürelidir.

Sabitler:

  • n ziyaret varsa n+1 geçiş vardır.
  • Bir ziyaretin öncesinde (aynı dizin) ve sonrasında (dizin + 1) her zaman bir geçiş olur.
  • Araç başlatma işlemi her zaman 0 numaralı geçişle takip edilir.
  • Aracın sonu her zaman #n geçişiyle başlar.

Yakınlaştırdığımızda Transition ve Visit sırasında gerçekleşen olaylar aşağıda açıklanmaktadır:

---+-------------------------------------+-----------------------------+-->
   |           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

Son olarak, geçiş sırasında TRAVEL, BREAKS, DELAY ve WAIT'in nasıl düzenlenebileceğini aşağıda bulabilirsiniz.

  • Çakışmazlar.
  • GECİKME benzersizdir ve bir sonraki ziyaretten (veya araç sonundan) hemen önce gelen kesintisiz bir süre olmalıdır. Bu nedenle, başlangıç ve bitiş zamanını bilmek için gecikme süresini bilmek yeterlidir.
  • ARALAR, kesintisiz ve çakışmayan zaman aralıklarıdır. Yanıt, her aranın başlangıç zamanını ve süresini belirtir.
  • TRAVEL ve WAIT, "öncelikli"dir: Bu geçiş sırasında birkaç kez kesintiye uğrayabilirler. Müşteriler, seyahatin "en kısa sürede" gerçekleşeceğini ve kalan sürenin "bekleme" ile geçeceğini varsayabilir.

(Karmaşık) bir örnek:

                               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 gösterimi
{
  "vehicleIndex": integer,
  "vehicleLabel": string,
  "vehicleStartTime": string,
  "vehicleEndTime": string,
  "visits": [
    {
      object (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "vehicleFullness": {
    object (VehicleFullness)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Alanlar
vehicleIndex

integer

Kaynaktaki diziniyle tanımlanan, rotayı gerçekleştiren araç ShipmentModel.

vehicleLabel

string

Belirtilmişse bu rotayı gerçekleştiren aracın ShipmentModel.vehicles(vehicleIndex).label değerine eşit etiketi.

vehicleStartTime

string (Timestamp format)

Aracın rotasına başladığı saat.

Zaman damgasında RFC 3339 kullanılır. Yani oluşturulan çıkış her zaman Z ile normalleştirilir ve 0, 3, 6 veya 9 kesirli basamak kullanılır. "Z" dışındaki zaman farkları da kabul edilir. Örnekler: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" veya "2014-10-02T15:01:23+05:30".

vehicleEndTime

string (Timestamp format)

Aracın rotasını tamamladığı zaman.

Zaman damgasında RFC 3339 kullanılır. Yani oluşturulan çıkış her zaman Z ile normalleştirilir ve 0, 3, 6 veya 9 kesirli basamak kullanılır. "Z" dışındaki zaman farkları da kabul edilir. Örnekler: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" veya "2014-10-02T15:01:23+05:30".

visits[]

object (Visit)

Bir rotayı temsil eden sıralı ziyaret dizisi. visits[i], rotadaki i. ziyarettir. Bu alan boşsa araç kullanılmamış olarak kabul edilir.

transitions[]

object (Transition)

Rotadaki geçişlerin sıralı listesi.

hasTrafficInfeasibilities

boolean

OptimizeToursRequest.consider_road_traffic doğru olarak ayarlandığında bu alan, rota zamanlamalarındaki tutarsızlıkların trafik tabanlı seyahat süresi tahminleri kullanılarak tahmin edildiğini gösterir. Ziyaret ve araç zaman aralıklarını karşılamaya devam ederken, ilk ziyaretten önce veya son ziyaretten sonra trafiğe göre ayarlanmış seyahati, ziyaretler arasındaki gecikmeleri ve molaları tamamlamak için yeterli zaman olmayabilir. Örneğin,

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

Trafik nedeniyle seyahat süresinin travelDuration(previous_visit, next_visit) kadar artması, next_visit konumuna varışın mevcut zaman aralığından daha geç olacağını gösteriyor. Ayrıca, seyahat süresi tahminlerindeki artış ve ziyaret veya mola zaman aralığı kısıtlamaları nedeniyle bir molanın ziyaretle çakışması zorunlu olabilir.

routePolyline

object (EncodedPolyline)

Rotanın kodlanmış çoklu çizgi gösterimi. Bu alan yalnızca OptimizeToursRequest.populate_polylines doğru olarak ayarlanmışsa doldurulur.

breaks[]

object (Break)

Bu rotayı gerçekleştiren araç için planlanan molalar. breaks dizisi, her biri ilgili startTime'de başlayıp duration saniye süren zaman aralıklarını gösterir.

metrics

object (AggregatedMetrics)

Bu rotanın süresi, mesafesi ve yük metrikleri. AggregatedMetrics alanları, bağlama bağlı olarak tüm ShipmentRoute.transitions veya ShipmentRoute.visits için toplanır.

vehicleFullness

object (VehicleFullness)

VehicleFullness alanı, sınırlı metriklerin ilgili araç sınırlarına ne kadar yakın olduğunu hesaplamak için kullanılır. Bu alanlar, sınırlı bir metrik alanı (ör. AggregatedMetrics.travel_distance_meters) ile ilgili araç sınırı (ör. Vehicle.route_distance_limit) arasındaki oranlardır.

Deneysel: Bu alanın davranışı veya varlığı gelecekte değişebilir.

routeCosts

map (key: string, value: number)

Rota maliyeti, maliyetle ilgili istek alanlarına göre dökümü alınmış şekilde. Anahtarlar, giriş OptimizeToursRequest'e göre proto yollarıdır (ör. "model.shipments.pickups.cost"). Değerler ise ilgili maliyet alanı tarafından oluşturulan ve rotanın tamamında toplanan toplam maliyettir. Başka bir deyişle, costs["model.shipments.pickups.cost"], rota üzerindeki tüm teslim alma maliyetlerinin toplamıdır. Modelde tanımlanan tüm maliyetler, 2022/01 itibarıyla yalnızca toplu olarak raporlanan TransitionAttributes ile ilgili maliyetler hariç olmak üzere burada ayrıntılı olarak raporlanır.

routeTotalCost

number

Rotanın toplam maliyeti. Maliyet haritasındaki tüm maliyetlerin toplamı.

Ziyaret edin

Bir rota sırasında gerçekleştirilen ziyaret. Bu ziyaret, Shipment teslim alma veya teslim etme işlemine karşılık gelir.

JSON gösterimi
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string,
  "injectedSolutionLocationToken": integer
}
Alanlar
shipmentIndex

integer

Kaynak ShipmentModel içindeki shipments alanının dizini.

isPickup

boolean

Doğruysa ziyaret, Shipment teslimatına karşılık gelir. Aksi takdirde, bir teslimata karşılık gelir.

visitRequestIndex

integer

VisitRequest'nın Shipment'daki teslim alma veya teslimat alanındaki dizini (bkz. isPickup).

startTime

string (Timestamp format)

Ziyaretin başladığı zaman. Aracın, ziyaret konumuna bu süreden daha önce ulaşabileceğini unutmayın. Saatler ShipmentModel ile tutarlıdır.

Zaman damgasında RFC 3339 kullanılır. Yani oluşturulan çıkış her zaman Z ile normalleştirilir ve 0, 3, 6 veya 9 kesirli basamak kullanılır. "Z" dışındaki zaman farkları da kabul edilir. Örnekler: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" veya "2014-10-02T15:01:23+05:30".

loadDemands

map (key: string, value: object (Load))

Gönderim ve ziyaret isteğinin toplamı olarak toplam ziyaret yükü talebi loadDemands. Ziyaret bir teslimatsa değerler negatiftir. Talepler, Transition.loads ile aynı türler için raporlanır (bu alana bakın).

detour

string (Duration format)

Ziyaretten önce rotada ziyaret edilen gönderiler ve zaman aralıklarının neden olduğu olası bekleme süresi nedeniyle ek sapma süresi. Ziyaret bir teslimatsa sapma, ilgili teslim alma ziyaretinden hesaplanır ve şu şekilde belirlenir:

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

Aksi takdirde, araç startLocation değerinden hesaplanır ve şu değere eşittir:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

shipmentLabel

string

Shipment içinde belirtilmişse ilgili Shipment.label kopyası.

visitLabel

string

VisitRequest içinde belirtilmişse ilgili VisitRequest.label kopyası.

injectedSolutionLocationToken

integer

Ziyaret edilen konumla ilgili bilgileri temsil eden opak bir jeton.

Bu alan, bu ziyaret için VisitRequest.avoid_u_turns doğru olarak ayarlandığında veya OptimizeToursRequest isteğinde ShipmentModel.avoid_u_turns doğru olarak ayarlandığında sonuç rotalarının ziyaretlerinde doldurulabilir.

Deneysel: Daha fazla bilgi için https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request adresini ziyaret edin.

Geçiş

Rotadaki iki etkinlik arasında geçiş yapma. ShipmentRoute açıklamasına bakın.

Araçta startLocation ve/veya endLocation yoksa ilgili seyahat metrikleri 0 olur.

JSON gösterimi
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "routeToken": string,
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Alanlar
travelDuration

string (Duration format)

Bu geçiş sırasında seyahat süresi.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

travelDistanceMeters

number

Geçiş sırasında kat edilen mesafe.

trafficInfoUnavailable

boolean

Trafik OptimizeToursRequest.consider_road_traffic üzerinden istendiğinde ve Transition için trafik bilgileri alınamadığında bu boole değeri doğru olarak ayarlanır. Bu durum geçici (anlık trafik sunucularında nadir görülen bir aksaklık) veya kalıcı (bu konum için veri yok) olabilir.

delayDuration

string (Duration format)

Bu geçişe uygulanan gecikme sürelerinin toplamı. Varsa gecikme, bir sonraki etkinlikten (ziyaret veya araç sonu) tam olarak delayDuration saniye önce başlar. Şu sayfaya göz atın: TransitionAttributes.delay.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

breakDuration

string (Duration format)

Bu geçiş sırasında meydana gelen araların süresinin toplamı (varsa). Her molanın başlangıç zamanı ve süresiyle ilgili ayrıntılar ShipmentRoute.breaks içinde saklanır.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

waitDuration

string (Duration format)

Bu geçiş sırasında bekleme süresi. Bekleme süresi, boşta kalma süresine karşılık gelir ve mola süresini içermez. Bu bekleme süresinin, birbirini izlemeyen aralıklar halinde bölünebileceğini de unutmayın.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

totalDuration

string (Duration format)

Geçişin toplam süresi (kolaylık olması açısından sağlanır). Şuna eşittir:

  • sonraki ziyaret startTime (veya bu son geçişse vehicleEndTime) - bu geçişin startTime;
  • ShipmentRoute.has_traffic_infeasibilities yanlışsa ayrıca şunlar geçerlidir: `totalDuration = travelDuration + delayDuration
  • breakDuration + waitDuration`.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

startTime

string (Timestamp format)

Bu geçişin başlangıç zamanı.

Zaman damgasında RFC 3339 kullanılır. Yani oluşturulan çıkış her zaman Z ile normalleştirilir ve 0, 3, 6 veya 9 kesirli basamak kullanılır. "Z" dışındaki zaman farkları da kabul edilir. Örnekler: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" veya "2014-10-02T15:01:23+05:30".

routePolyline

object (EncodedPolyline)

Geçiş sırasında izlenen rotanın kodlanmış çoklu çizgi gösterimi. Bu alan yalnızca populateTransitionPolylines doğru olarak ayarlanmışsa doldurulur.

routeToken

string

Yalnızca çıkış. Rotayı izleme sırasında rotayı yeniden oluşturmak için Navigation SDK'ya iletilebilen ve yeniden yönlendirme durumunda rota oluşturulurkenki orijinal amacı karşılayan opak bir jeton. Bu jetonu opak bir blob olarak değerlendirin. Hizmet tam olarak aynı rotayı döndürse bile değeri değişebileceğinden, istekler arasında değerini karşılaştırmayın. Bu alan yalnızca populateTransitionPolylines doğru olarak ayarlanmışsa doldurulur.

vehicleLoads

map (key: string, value: object (VehicleLoad))

Bu geçiş sırasında araç yükleri, bu aracın Vehicle.load_limits içinde görünen veya bu rotada yapılan bazı gönderilerde sıfır olmayan Shipment.load_demands olan her tür için.

İlk geçiş sırasındaki yükler, araç rotasının başlangıç yükleridir. Ardından, her ziyaretten sonra, ziyaretin loadDemands, ziyaretin teslim alma veya teslimat olmasına bağlı olarak bir sonraki geçişin yüklerini elde etmek için eklenir ya da çıkarılır.

EncodedPolyline

Çoklu çizginin kodlanmış temsili. Çoklu çizgi kodlama hakkında daha fazla bilgiyi şu adreslerde bulabilirsiniz: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

JSON gösterimi
{
  "points": string
}
Alanlar
points

string

Çoklu çizginin kodlanmış noktalarını temsil eden dize.

Ara

Bir mola yürütülmesini temsil eden veriler.

JSON gösterimi
{
  "startTime": string,
  "duration": string
}
Alanlar
startTime

string (Timestamp format)

Aranın başlangıç zamanı.

Zaman damgasında RFC 3339 kullanılır. Yani oluşturulan çıkış her zaman Z ile normalleştirilir ve 0, 3, 6 veya 9 kesirli basamak kullanılır. "Z" dışındaki zaman farkları da kabul edilir. Örnekler: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" veya "2014-10-02T15:01:23+05:30".

duration

string (Duration format)

Mola süresi.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

VehicleFullness

VehicleFullness, bir aracın ne kadar dolu olduğunu hesaplayan bir metriktir. Her VehicleFullness alanı 0 ile 1 arasındadır ve varsa sınırlı bir metrik alanı (ör. AggregatedMetrics.travel_distance_meters) ile ilgili araç sınırı (ör. Vehicle.route_distance_limit) arasındaki oran olarak hesaplanır. Aksi takdirde doluluk oranı ayarlanmamış olarak kalır. Sınır 0 ise alan 1 olarak ayarlanır. Not: Bir rota trafik nedeniyle uygunsuz olduğunda bazı ham doluluk oranları 1, 0'ı aşabilir. Örneğin, araç mesafe sınırını aşabilir. Bu gibi durumlarda doluluk değerlerini 1, 0 ile sınırlarız.

JSON gösterimi
{
  "maxFullness": number,
  "distance": number,
  "travelDuration": number,
  "activeDuration": number,
  "maxLoad": number,
  "activeSpan": number
}
Alanlar
maxFullness

number

Bu iletideki diğer tüm alanların maksimum değeri.

distance

number

AggregatedMetrics.travel_distance_meters ile Vehicle.route_distance_limit arasındaki oran. Vehicle.route_distance_limit ayarlanmamışsa bu alan da ayarlanmamış olur.

travelDuration

number

[AggregatedMetrics.travel_duration_seconds][] ile Vehicle.travel_duration_limit arasındaki oran. Vehicle.travel_duration_limit ayarlanmamışsa bu alan da ayarlanmamış olur.

activeDuration

number

[AggregatedMetrics.total_duration_seconds][] ile Vehicle.route_duration_limit arasındaki oran. Vehicle.route_duration_limit ayarlanmamışsa bu alan da ayarlanmamış olur.

maxLoad

number

Tüm [AggregatedMetrics.max_load][] türleri ve ilgili Vehicle.load_limits arasındaki maksimum oran. Tüm Vehicle.load_limits alanları ayarlanmamışsa bu alan da ayarlanmaz.

activeSpan

number

Belirli bir araç için (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) oranı. Payda yoksa bunun yerine (ShipmentModel.global_end_time - ShipmentModel.global_start_time) kullanılır.