אופטימיזציה של נקודות ציון היא תכונה של 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
}
בדוגמה הזו, אפשר לראות שהאופטימיזציה של נקודות הדרך הופכת את הסדר המקורי שלהן.
שיטות מומלצות
עיבוד בקשה עם נקודות ציון אופטימליות נמשך זמן רב יותר מעיבוד בקשה פשוטה לניתוב. לכן, מומלץ להגדיר ערך גבוה יותר לפסק הזמן בקריאה לשיטה, על ידי הגדרת ערך לכותרת הבקשה X-Server-Timeout
של עשר שניות לפחות. אם עדיין מופיעות שגיאות של פסק זמן, אפשר להוסיף עוד שנייה ולנסות שוב.
מגבלות שימוש
כדי להשתמש באופטימיזציה של נקודות ציון, צריך לפעול בהתאם למגבלות ולתנאי השימוש הבאים:
אתם יכולים לציין עד למגבלת השימוש של ציוני דרך ביניים במסלול:
- עד 98 נקודות ציון לדרך באמצעות קואורדינטות של קו אורך וקו רוחב בלבד.
- עד 25 נקודות ציון אם מציינים נקודות ציון באמצעות מזהי מקומות.
כל נקודות הציון חייבות להיות מסוג stopover. אף אחת מנקודות הדרך לא יכולה להיות מסוג דרך.
צריך להוסיף את
routes.optimizedIntermediateWaypointIndex
לשדה mask.אם הבקשה כוללת 25 או יותר נקודות ציון ביניים, היא צריכה לעמוד גם בתנאים הבאים:
המרחק המצטבר בקו ישר בין כל נקודות הדרך צריך להיות קטן מ-1,000 ק"מ. המרחק הזה כולל גם את נקודת היציאה וגם את היעד.
אמצעי התחבורה חייב להיות DRIVE.