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

אופטימיזציה של נקודות ציון היא תכונה של Routes Preferred שמרחיבה את 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 שניות ב-request header‏ X-Server-Timeout. אם אתם ממשיכים לקבל שגיאות של זמן קצוב לתפוגה, אתם יכולים להוסיף עוד שנייה ולנסות שוב.

מגבלות השימוש

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

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

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

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

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

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

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