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

אופטימיזציה של נקודות ציון היא תכונה של 'מסלולים מועדפים' שנמצאת ב-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 באובייקט הנתיבים בגוף התשובה. הקו הפוליגוני המקודד זהה ל-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.