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

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

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

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

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

מסך של מכשיר נייד שמוצגת בו פנייה ימינה קרובה, בעוד 50 רגל, אל רחוב צ'רץ'. בחלק התחתון של המסך, הזמן שנותר עד ליעד הוא 13 דקות, והמרחק שנותר הוא 3.3 ק"מ.

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

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

הגדרה של רכיב event listener

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

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

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

כדי להוסיף לאפליקציה תמיכה במסלול מפורט, צריך ליצור רכיב event listener לאירוע didChangeNavInfo. ברכיב ה-event listener, משתמשים במחלקות ובערכי ה-enum הבאים כדי לשלוט בניווט במסלול המפורט:

  • GMSNavigationNavInfo — מחלקה שמגדירה מידע על מצב הניווט.

  • GMSNavigationStepInfo ‫— Class defining information about a single step along a navigation route.

  • ‫GMSNavigationNavState – טיפוס מוגדר מראש (enum) שמגדיר את המצב הנוכחי של הניווט, למשל "בדרך", "חישוב מסלול מחדש" או "נעצר".

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

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

בהמשך מוצגות דוגמאות לרכיבי event listener של האירוע didChangeNavInfo:

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
          ...
        }
      }
    }
  }

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;
        ...
      }
    }
    ...
  }

משתמשים במאפיין 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];
      

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

סמל של תמרון

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

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

חלק מהתמרונים כוללים תווית נוספת Clockwise (עם כיוון השעון) או CounterClockwise (נגד כיוון השעון), שה-SDK קובע על סמך צד הנהיגה במדינה. לדוגמה, במדינות שבהן נוהגים בצד שמאל של הכביש, הנהגים נכנסים לכיכר או מבצעים פניית פרסה בכיוון השעון, בעוד שבמדינות שבהן נוהגים בצד ימין של הכביש, הנהגים נכנסים לכיכר או מבצעים פניית פרסה נגד כיוון השעון. ‫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

שימוש בסמלים שנוצרו על ידי AI

‫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];