Rota ara noktalarınızı optimize edin

Ara nokta optimizasyonu, ComputeRoutes'i genişleten bir Routes Preferred özelliğidir. Yolcunun rotasındaki ara noktaların sırasını optimize ederek mümkün olan en verimli rotada seyahat etmesini sağlar. ComputeRoutes ara nokta optimizasyonu uygulaması aşağıdaki seyahat modlarını destekler:

  • Araba
  • Motorlu iki tekerlekli araç kullanma
  • bisiklet
  • Yaya

Ara nokta optimizasyonunu neden kullanmalısınız?

Kullanıcılara bir hedefe giden yolda bir dizi ara nokta boyunca rehberlik eden bir uygulama oluştururken, yolcunun ara noktaları en uygun sırayla geçmesi önemlidir. Bu sayede yolcu, her ara noktaya en kısa sürede ulaşır.

İşleyiş şekli

Varsayılan olarak ComputeRoutes, rotayı başlangıçta sağlanan sırayla ara noktalar üzerinden hesaplar. Ara yol noktalarını daha verimli bir sıraya göre yeniden düzenleyerek rotayı optimize etmek için ComputeRoutes kullanabilirsiniz. İstek gövdesindeki optimizeWaypointOrder alanını true olarak ayarlarsanız optimize edilmiş ara noktalara sahip bir rota alırsınız.

Not: Ara nokta optimizasyonu hesaplaması temel olarak seyahat süresine dayanır ancak bu özellik, mesafe ve dönüş sayısı gibi diğer faktörleri de dikkate alır.

Yeniden sıralanan ara noktaları alma

Yeniden sıralanmış ara noktalar içeren bir rota almak için ComputeRoutes isteğinizin gövdesinde optimizeWaypointOrder boole alanını true olarak ayarlayın. Ayrıca alan maskesine optimizedIntermediateWaypointIndex alanını ekleyin. Yanıt gövdesi, optimizedIntermediateWaypointIndex alanlarında optimize edilmiş ara nokta sırasını içerir.

Not: optimizedIntermediateWaypointIndex alanı, sıfır tabanlı değerler döndürür.

Örnek istek

Aşağıdaki örnek istek, Stanford Üniversitesi kampüsünün yakınında bir rota sağlar. Rota ara noktaları, istekte sırayla sağlanmıştır. İstek, bir başlangıç noktası, bir varış noktası ve iki ara nokta içerir.

POST /v1alpha:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Server-Timeout: 10
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex,routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline
{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.418956,
        "longitude": -122.160815
      }
    }
  },
  "intermediates": [
    {
      "location":{
        "latLng":{
          "latitude": 37.4176423,
          "longitude":-122.1102246
        }
      }
    },
    {
      "location":{
        "latLng":{
          "latitude": 37.407689,
          "longitude": -122.1360597
        }
      }
    }
  ],
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.4032137,
        "longitude": -122.0349119
      }
    }
  },
  "travelMode": "DRIVE",
  "optimizeWaypointOrder": true,
  "routingPreference": "TRAFFIC_AWARE"}

Örnek yanıt

Yeniden sıralanan ara durak noktası dizinlerini, yanıt gövdesindeki rotalar nesnesinin içindeki optimizedIntermediateWaypointIndex alanlarında bulabilirsiniz. Kodlanmış çoklu çizgi, Directions API ve ComputeRoutes ile aynıdır.

routes {
  distance_meters: 17647
  duration {
    seconds: 1866
  }
  polyline {
    encoded_polyline: "wkkcFvorhVU{@Ec@C}CG}@Mm@[}@i@y@[[g@_@Tk@BSjCgGfF|D\\Pv@Lj@@XaCTeC\\aCTs@`ByD`@k@h@e@x@Yh@GtADhBF|@G`AWpAs@lAsAdA{A`BmDr@cBmUqQoS}OyGmFiBsAgEwD}CaCU_@Og@@e@Hy@nGkO~@sBr@cBlDqIlByEp@}AjIfGnBbBHLLd@^p@~ErDfNrKrA~@DIhEeBTQ~AqDlE{KjBgE|FnEh@aAi@`A}FoE~AmD`A}BcAm@mHwFwD}CkLwIsDqCgF_EG[GKnCsDrA_BrC_CnCoBpEkD`EyClCsBcBeBIAkGkH]k@eJmKQKsAuA_@g@wCoDGQmEmFmIqROKaDuHvBkBxAgANCRH^f@v@dBHDD?`AUiBqEhBpEaATMCQYm@wAY]SIOByAfAwBjB_ByDaAwBiCeIA[c@aBqEuNOm@IQbA{c@p@aZFmCTuBLg@Tc@BUAKxOeV~Vy_@nBoDv@_BvAcDzA_EdG{RdC{HtIsY|B{Hx@mDbAuFdBsMbKsv@TaBf@}AdF{Sn@_DJq@Lo@aE`@]GUQmAmAQk@@g@RK`Ce@d@UDEPc@f@cCrAyGJs@X{AbIem@bA{JD_AIaAMg@o@{A_Ad@y@NaCLCsCK_FGI"
  }
  optimizedIntermediateWaypointIndex: 1
  optimizedIntermediateWaypointIndex: 0
}

Bu örnekte, yol noktalarının optimize edilmesinin orijinal sıralarını tersine çevirdiğine dikkat edin.

Optimize edilmiş yol noktaları içeren bir isteğin işlenmesi, basit bir rota isteğine kıyasla daha uzun sürer. Bu nedenle, X-Server-Timeout istek başlığı için en az on saniyelik bir değer belirleyerek yöntem çağrısında daha yüksek bir zaman aşımı ayarlamanızı öneririz. Zaman aşımı hataları almaya devam ederseniz bir saniye daha ekleyip tekrar deneyebilirsiniz.

Kullanım sınırları

Ara nokta optimizasyonunu kullanmak için aşağıdaki kullanım sınırlarına ve koşullarına uymanız gerekir:

  • Rotanızdaki ara yol noktaları için kullanım sınırına kadar değer belirtebilirsiniz:

    • Yalnızca enlem ve boylam koordinatları kullanılarak en fazla 98 ara nokta.
    • Yer kimliklerini kullanarak herhangi bir ara nokta belirtirseniz en fazla 25 ara nokta.
  • Tüm ara noktalarınız stopover türünde olmalıdır. Ara noktalarınızın hiçbiri via türünde olamaz.

  • Alan maskesine routes.optimizedIntermediateWaypointIndex eklemeniz gerekir.

  • İsteğinizde 25 veya daha fazla ara nokta varsa aşağıdaki koşullara da uyması gerekir:

    • Tüm ara noktalar arasındaki toplam düz çizgi mesafesi 1.000 km'den az olmalıdır. Bu mesafeye hem başlangıç hem de varış noktası dahildir.

    • Seyahat modu DRIVE olmalıdır.