שינוי העדפות הניתוב

חישובי המסלול (כולל שינוי מסלול) מחזירים את המסלול שלוקח הכי פחות זמן לנווט בו בתור המסלול הטוב ביותר שמוגדר כברירת מחדל. אבל אתם יכולים לשנות את אסטרטגיית הניתוב כך שהמסלול הקצר יותר מבין החלופות יוחזר במקום זאת.

המונח קצר יותר מתייחס למסלול הקצר ביותר מבין המסלולים האופטימליים, על סמך מודל העלות שמוגדר כברירת מחדל. יכול להיות שהמסלול הקצר יותר הוא לא המסלול הקצר ביותר באופן מוחלט, כי האפשרות הזו יכולה להיות חלופה לא טובה. לדוגמה, אם המסלול הקצר ביותר הוא באורך 10 ק"מ וזמן הנסיעה בו הוא 50 דקות, ויש מסלול אחר באורך 15 ק"מ אבל זמן הנסיעה בו הוא רק 20 דקות, האפשרות השנייה היא האופטימלית, כי לא כדאי להוסיף 30 דקות לנסיעה כדי לחסוך 5 ק"מ.

אחרי שמגדירים את אסטרטגיית המסלול לנסיעה, היא לא משתנה עד שהנסיעה מסתיימת. כדי לשנות את אסטרטגיית הניתוב של נסיעה קיימת, צריך למחוק את היעדים ולהגדיר אותם מחדש עם אסטרטגיית הניתוב החדשה.

מתבצעת קבלת פרטי המסלול

כדי לקבוע איזו אסטרטגיית מסלול היא הבחירה האופטימלית לנקודת דרך נתונה, צריך להפעיל את getRouteInfoForDestination() כדי לקבל את פרטי המסלול גם של המסלול הטוב ביותר שמוגדר כברירת מחדל וגם של המסלול הקצר ביותר. הפרטים כוללים את משך הנסיעה והמרחק לציון הדרך של היעד.

הפרטים האלה מגיעים מהשדה GMSNavigationRouteInfo ב-callback.

דוגמה

בדוגמת הקוד הבאה מוסבר איך לקבל פרטי מסלול לכל אחת משתי אסטרטגיות הניתוב.

Swift

let routingOptions = GMSNavigationRoutingOptions()
navigator?.getRouteInfoForDestination(destination,
                                      routingOptions: routingOptions) { routeInfo in
  ...
}

Objective-C

GMSNavigationRoutingOptions *routingOptions =
    [[GMSNavigationRoutingOptions alloc] init];
[navigator getRouteInfoForDestination:destination
                   withRoutingOptions:routingOptions
                             callback:^(GMSNavigationRouteInfo *routeInfo){...}];

הגדרת אסטרטגיית הניתוב

כדי להגדיר את אסטרטגיית הניתוב, אפשר להשתמש ב-GMSNavigationRoutingOptions ולהגדיר את routingStrategy כשקוראים ל-setDestinations().

‫routingStrategy מקבל אחד מהערכים המספריים הבאים:

ערך מספורתיאור
GMSNavigationRoutingStrategyDefaultBest מדרג את המסלולים לפי מודל העלות שמוגדר כברירת מחדל ב-Navigation SDK. זוהי אסטרטגיית הניתוב שמוגדרת כברירת מחדל.
GMSNavigationRoutingStrategyShorter מדרג את המסלולים לפי מרחק. המסלול עם הדירוג הגבוה ביותר הוא המסלול הקצר ביותר מבין המסלולים שהוחזרו.

דוגמה

בדוגמת הקוד הבאה אפשר לראות איך מגדירים את אסטרטגיית הניתוב למסלול הקצר יותר.

Swift

let routingOptions = GMSNavigationRoutingOptions(routingStrategy: .shorter)
navigator?.setDestinations(destinations,
                           routingOptions: routingOptions) { routeStatus in
  ...
}

Objective-C

GMSNavigationRoutingOptions *routingOptions = [[GMSNavigationRoutingOptions alloc] initWithRoutingStrategy:GMSNavigationRoutingStrategyShorter];
[navigator setDestinations:destinations
            routingOptions:routingOptions
                  callback:^(GMSRouteStatus routeStatus){...}];

מסלולים שכוללים מעבורות

כברירת מחדל, Navigation SDK ל-iOS לא כולל מסלולים עם מעבורות. אם אתם מעדיפים לכלול אפשרויות של מעבורות במסלולים, אתם יכולים לשנות את העדפת המסלול הזו כדי לחשוף את הנסיעה למקטעי מעבורת על ידי הגדרת avoidsFerries ל-false.

דוגמה

Swift

self.mapView.navigator?.avoidsFerries = false

Objective-C

self.mapView.navigator.avoidsFerries = NO

הפורמט של נכס היתרונות המרכזיים של המסלול

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

הגדרת הפורמט של הסבר המסלול

אפשר לשנות את הפורמט של תיאור המסלול באמצעות הגדרת routeCalloutFormat ב-GMSMapView. ‫routeCalloutFormat מקבל אחד מהערכים הבאים:

ערך מספורתיאור
GMSNavigationRouteCalloutFormatDefault הצגת הזמן שנותר כשמשתמשים באסטרטגיית הניתוב של המסלול הטוב ביותר שמוגדרת כברירת מחדל. הצגת המרחק שנותר כשמשתמשים באסטרטגיית הניתוב "המסלול הקצר יותר"
GMSNavigationRouteCalloutFormatTime הצגת הזמן שנותר.
GMSNavigationRouteCalloutFormatDistance הצגת המרחק שנותר.

דוגמה

בדוגמת הקוד הבאה מוסבר איך להגדיר את הפורמט של בקשת ה-gRPC.

Swift

self.mapView.routeCalloutFormat = .time

Objective-C

_mapView.routeCalloutFormat = GMSNavigationRouteCalloutFormatTime;