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

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

מגבלות שימוש

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

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

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

  • חובה להוסיף את routes.optimizedIntermediateWaypointIndex למסכה של השדה.

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

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

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