אופטימיזציה של ציוני דרך היא תכונה של 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.