פרטים על פיד הנתונים של המסלול המפורט

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

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

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

רכיבי תצוגה חיוניים של ניווט

מסך של מכשיר נייד שבו מוצגת פנייה ימינה שצפויה בעוד 15 מטרים לרחוב Church. בחלק התחתון של המסך מוצגים הזמן שנותר עד ליעד (13 דקות) והמרחק שנותר (3.4 ק"מ).

השדות הראשיים של כל שלב ניווט הם שם הכביש המלא, התמרון והמרחק הכולל של השלב, שזמינים ב-GMSNavigationStepInfo.

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

הגדרת פונקציית event listener

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

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

טיפול באירוע didChangeNavInfo

כדי להוסיף תמיכה בניווט מפורט לאפליקציה, יוצרים מאזין לאירוע didChangeNavInfo. במאזין האירועים, משתמשים ברשימה הבאה של כיתות וממשקי Enum כדי לשלוט בניווט מפורט:

  • GMSNavigationNavInfo — מידע שמגדיר את מצב הניווט.

  • GMSNavigationStepInfo — מידע שמוגדר באמצעות הכיתה לגבי שלב יחיד בנתיב ניווט.

  • GMSNavigationNavState — Enum שמגדיר את המצב הנוכחי של ניווט, למשל 'בדרך', 'שינוי מסלול' או 'עצור'.

  • GMSNavigationDrivingSide — Enum שמגדיר אם השלב הזה נמצא במסלול שבו נוהגים בצד ימין או בצד שמאל.

  • GMSNavigationManeuver — Enum שמגדיר את פעולת הניווט שצריך לבצע, כמו פנייה שמאלה או ימינה.

בהמשך מפורטות דוגמאות למאזני אירועים לאירוע didChangeNavInfo:

Objective-C

  // ViewController.h
  @interface SomeViewController () <GMSNavigatorListener>

  @end

  // ViewController.m
  @implementation SomeViewController
  // Some initialization code.
  ... {
    ...
    [_mapView.navigator addListener:self];
    ...
  }

  #pragma mark GMSNavigatorListener
  - (void)navigator:(GMSNavigator *)navigator didUpdateNavInfo:(GMSNavigationNavInfo *)navInfo {
    // Get the current step information
    if (navInfo.navState == GMSNavigationNavStateEnroute) {
      GMSNavigationStepInfo *currentStep = navInfo.currentStep;
      if (currentStep) {
        ...
        roadNameLabel.text = currentStep.simpleRoadName;
        ...
      }
    }
    ...
  }

Swift

  // ViewController.swift
  class SomeViewController: UIViewController {
    ...
    mapView.navigator?.add(self);
    ...
  }

  extension SomeViewController: GMSNavigatorListener {
    func navigator(_ navigator: GMSNavigator,
                   didUpdateNavInfo navInfo: GMSNavigationNavInfo) {

      // Get the current step information
      if navInfo.navState == .enroute {
        if let currentStep = navInfo.currentStep {
          ...
          roadNameLabel.text = currentStep.simpleRoadName
          ...
        }
      }
    }
  }

משתמשים במאפיין navState של GMSNavigationNavInfo כדי לקבל את המצב הנוכחי של הניווט, שהוא אחד מהמצבים הבאים:

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

  • שינוי מסלולGMSNavigationNavStateRerouting מציין שהניווט מתבצע, אבל המערכת מחפשת מסלול חדש. שלב התמרון הקרוב לא זמין כי עדיין אין מסלול חדש.

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

הנחיה לבחירת נתיב

‏Navigation SDK מייצג את הנתיבים בכרטיס הניווט עם נתוני GMSNavigationLane ו-GMSNavigationLaneDirection. אובייקט GMSNavigationLane מייצג נתיב ספציפי במהלך הניווט, ויש לו רשימה של אובייקטים מסוג GMSNavigationLaneDirection שמתארים את כל הפניות שאפשר לבצע מהנתיב הזה.

השדה recommended מציין את הכיוון המומלץ לנהגים בנתיב.

דוגמה להנחיה לבחירת נתיב

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

// Lane 1
GMSNavigationLaneDirections =
  [{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]

// Lane 2
GMSNavigationLaneDirections =
  [{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]

// Lane 3
GMSNavigationLaneDirections =
  [{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]

// Lane 4
GMSNavigationLaneDirections =
  [{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]

תמונות של הנחיות לבחירת נתיב

‏Navigation SDK תומך ביצירת תמונות של נתיבים לכל שלב ניווט, כפי שמתואר ב-GMSNavigationStepInfo. הסמלים האלה תואמים להנחיות של CarPlay לגבי גודל התמונות.

Swift

let currentStepInfo = navInfo.currentStep

let options = GMSNavigationStepImageOptions()
options.maneuverImageSize = .square96
options.screenMetrics = UIScreen.mainScreen

let maneuverImage = currentStepinfo.maneuverImage(options: options)
      

Objective-C

GMSNavigationStepInfo *stepInfo = navInfo.currentStep;

GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init];
options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96;
options.screenMetrics = UIScreen.mainScreen;

UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
      

יצירת סמלים לתמרונים

סמל תמרון

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

צריך ליצור סמלי תמרון ולהתאימם לתמרונים המשויכים. לחלק מהתמרונים אפשר להגדיר מיפוי אחד-לאחד לסמל, כמו GMSNavigationManeuverDestinationLeft ו-GMSNavigationManeuverDestinationRight. עם זאת, מכיוון שלתמרונים מסוימים יש מאפיינים משותפים עם תמרונים אחרים, כדאי למפות יותר מתמרון אחד לסמל אחד. לדוגמה, אפשר למפות את GMSNavigationManeuverTurnLeft וגם את GMSNavigationManeuverOnRampLeft לסמל של פנייה שמאלה.

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

אפשר להרחיב את התמונה כדי לראות דוגמאות לסמלים של פעולות שונות

סמל לדוגמה תמרונים מפורטים
DEPART
UNKNOWN
STRAIGHT
ON_RAMP_UNSPECIFIED
OFF_RAMP_UNSPECIFIED
NAME_CHANGE
TURN_RIGHT
ON_RAMP_RIGHT
TURN_LEFT
ON_RAMP_LEFT
TURN_SLIGHT_RIGHT
ON_RAMP_SLIGHT_RIGHT
OFF_RAMP_SLIGHT_RIGHT
TURN_SLIGHT_LEFT
ON_RAMP_SLIGHT_LEFT
OFF_RAMP_SLIGHT_LEFT
TURN_SHARP_RIGHT
ON_RAMP_SHARP_RIGHT
OFF_RAMP_SHARP_RIGHT
TURN_SHARP_LEFT
ON_RAMP_SHARP_LEFT
OFF_RAMP_SHARP_LEFT
TURN_U_TURN_COUNTERCLOCKWISE
ON_RAMP_U_TURN_COUNTERCLOCKWISE
OFF_RAMP_U_TURN_COUNTERCLOCKWISE
TURN_U_TURN_CLOCKWISE
ON_RAMP_U_TURN_CLOCKWISE
OFF_RAMP_U_TURN_CLOCKWISE
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_RIGHT_CLOCKWISE
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
ROUNDABOUT_STRAIGHT_CLOCKWISE
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_LEFT_CLOCKWISE
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
ROUNDABOUT_U_TURN_CLOCKWISE
ROUNDABOUT_COUNTERCLOCKWISE
ROUNDABOUT_CLOCKWISE
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
ROUNDABOUT_EXIT_CLOCKWISE
MERGE_RIGHT
OFF_RAMP_RIGHT
MERGE_LEFT
OFF_RAMP_LEFT
FORK_RIGHT
TURN_KEEP_RIGHT
ON_RAMP_KEEP_RIGHT
OFF_RAMP_KEEP_RIGHT
FORK_LEFT
TURN_KEEP_LEFT
ON_RAMP_KEEP_LEFT
OFF_RAMP_KEEP_LEFT
MERGE_UNSPECIFIED
DESTINATION
DESTINATION_RIGHT
DESTINATION_LEFT
FERRY_BOAT
FERRY_TRAIN

שימוש בסמלים שנוצרו

‏Navigation SDK תומך ביצירת סמלי תמרון עבור GMSNavigationStepInfo נתון. הסמלים האלה עומדים בדרישות המדריך בנושא התאמת הגודל של תמונות ב-CarPlay.

Swift

let currentStepInfo = navInfo.currentStep

let options = GMSNavigationStepImageOptions()
options.maneuverImageSize = .square96
options.screenMetrics = UIScreen.mainScreen

let maneuverImage = currentStepinfo.maneuverImage(options: options)
      

Objective-C

GMSNavigationStepInfo *stepInfo = navInfo.currentStep;

GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init];
options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96;
options.screenMetrics = UIScreen.mainScreen;

UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];