אופטימיזציה של ציוני הדרך במסלול

אופטימיזציה של נקודות דרך היא תכונת 'מסלולים מועדפים' שמרחיבה את ComputeRoutes. המערכת מבצעת אופטימיזציה של הסדר של נקודות הציון הביניים במסלול של הנוסע, כדי לוודא שהוא נוסע במסלול היעיל ביותר האפשרי. ההטמעה של ComputeRoutes לאופטימיזציה של נקודות ציון תומכת בדרכים הבאות:

  • נהיגה
  • כלי רכב דו-גלגלי ממונע
  • רכיבה על אופניים
  • הליכה

למה כדאי להשתמש באופטימיזציה של נקודות ציון?

כשאתם מפתחים אפליקציה שמנחה את המשתמשים דרך מספר נקודות דרך בדרך ליעד, חשוב שהנוסע יעבור את נקודות הדרך בסדר האופטימלי. כך הנוסע מגיע לכל נקודת ציון בזמן הקצר ביותר.

איך זה עובד

כברירת מחדל, ComputeRoutes מחשב מסלול דרך נקודות הציון שלו, בסדר שבו הן סיפקו במקור. כדי לבצע אופטימיזציה של המסלול ב-ComputeRoutes, אפשר לשנות את סדר הנקודות הבין-דרך ליעיל יותר. אם תגדירו את השדה optimizeWaypointOrder בגוף הבקשה לערך true, תקבלו מסלול עם נקודות עצירה שהוגדרו באופן אופטימלי.

הערה: החישוב של אופטימיזציית נקודות העצירה מבוסס בעיקר על זמן הנסיעה, אבל התכונה מביאה בחשבון גם גורמים אחרים, כמו המרחק ומספר הפניות.

אחזור של נקודות דרך בסדר מחדש

כדי לקבל מסלול עם נקודות דרך בסדר מחדש, מגדירים את השדה הבווליאני optimizeWaypointOrder לערך true בגוף הבקשה ל-ComputeRoutes. כמו כן, צריך לכלול את השדה optimizedIntermediateWaypointIndex במסכת השדות. גוף התשובה מכיל את סדר הנקודות האופטימלי בשדות optimizedIntermediateWaypointIndex.

הערה: השדה optimizedIntermediateWaypointIndex מחזיר ערכים שמתחילים באפס.

בקשה לדוגמה

בבקשת הדוגמה הבאה מצוין מסלול ליד הקמפוס של אוניברסיטת סטנפורד. נקודות העצירה במסלול צוינו בבקשה ברצף. הבקשה מכילה נקודת מוצא ונקודת יעד, עם שתי נקודות ציון ביניים.

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

דוגמה לתשובה

האינדקסים של נקודות הדרך הביניים בסדר החדש מופיעים בשדות optimizedIntermediateWaypointIndex באובייקט routes בגוף התגובה. הקווים הפוליגונים המקודדים זהים לקווים ב-Directions API וב-ComputeRoutes.

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
}

בדוגמה הזו, שימו לב שהאופטימיזציה של נקודות העצירה הופכת את הסדר המקורי שלהן.

עיבוד בקשה עם נקודות עצירה שהוגדרו אופטימלית נמשך זמן רב יותר מעיבוד בקשת ניתוב פשוטה. לכן, מומלץ להגדיר זמן קצוב ארוך יותר לתפוגה של קריאת ה-method, על ידי הגדרת ערך של 10 שניות לפחות לכותרת הבקשה X-Server-Timeout. אם ממשיכות להופיע שגיאות של זמן קצוב פג, אפשר להוסיף עוד שנייה ולנסות שוב.

מגבלות שימוש

כדי להשתמש באופטימיזציה של נקודות ציון, עליכם לפעול בהתאם למגבלות ולתנאים הבאים:

  • אפשר לציין עד למגבלת השימוש של ציוני דרך ביניים במסלול:

    • עד 98 נקודות דרך באמצעות קואורדינטות של קו אורך וקו רוחב בלבד.
    • עד 25 נקודות דרך, אם מציינים נקודות דרך באמצעות מזהי מקומות.
  • כל נקודות העצירה חייבות להיות מסוג stopover. אף אחד מנקודות הדרך לא יכול להיות מסוג דרך.

  • צריך להוסיף את הערך routes.optimizedIntermediateWaypointIndex למסכת השדה.

  • אם הבקשה כוללת 25 נקודות ציון ביניים או יותר, היא צריכה לעמוד גם בתנאים הבאים:

    • המרחק המצטבר בקו ישר בין כל נקודות הדרך חייב להיות פחות מ-1,000 ק"מ. המרחק הזה כולל גם את נקודת ההתחלה וגם את נקודת היעד.

    • מצב הנסיעה חייב להיות 'נסיעה'.