ניהול ציוני דרך

במאמר הזה מוסבר איך אפשר לנהל את ההעדפות של נקודות ציון באפליקציה באמצעות שתי תכונות:

  • העדפות מסלול לפי צד הכביש
  • עצירת ביניים

הגדרת העדפת ניתוב לצד הכביש

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

איך זה עובד

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

העדפה לאותו צד של הכביש

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

(nullable instancetype)initWithLocation:(CLLocationCoordinate2D)location
                                  title:(NSString *)title
                   preferSameSideOfRoad:(BOOL)preferSameSideOfRoad;

הגדרת כיוון הגעה

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

(nullable instancetype)initWithLocation:(CLLocationCoordinate2D)location
                                  title:(NSString *)title
                preferredSegmentHeading:(int32_t)preferredSegmentHeading;

ערכת ה-SDK לניווט בוחרת את קטע הכביש שהכי קרוב לנקודת הדרך, שיש לו כיוון נתיב שתואם (בטווח של +/- 55 מעלות) לצד הכביש שבו נמצאת נקודת הדרך.

הגדרת העדפה לעצירת ביניים

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

איך זה עובד

כדי להגדיר את ההעדפה לגבי עצירת ביניים, צריך ליצור את נקודת הציון של העצירה הזו. כדי לעשות את זה, מגדירים את ההעדפה לעצירת ביניים ב-GMSNavigationMutableWaypoint, כמו בדוגמה הבאה:

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint = GMSNavigationMutableWaypoint(location: location, title: "waypoint from location")!
waypoint.vehicleStopover = true
mapView.navigator?.setDestinations([waypoint], routingOptions: routingOptions, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationMutableWaypoint *waypoint =
    [[GMSNavigationMutableWaypoint alloc] initWithLocation:location
                                                     title:@"waypoint from location"];
waypoint.vehicleStopover = YES;
[_mapView.navigator setDestinations:@[waypoint1]
                     routingOptions:routingOptions
                           callback:^(GMSRouteStatus routeStatus){...}];