פיד נתונים של מסלול מפורט מספק מידע על ניווט בלבד למכשירים שלא תוכננו להנחיות ניווט שמבוססות על מפה. הוא מספק תמונה של תמרונים עתידיים עם רכיבים שאתם מספקים:
- סמלים (שמאלה, ימינה, פניית פרסה)
- מספרי פנייה במעגלי תנועה
- שמות של כבישים
- המרחק והזמן המשוערים לשלב הבא בניווט או ליעד הסופי
אפשר להשתמש בפיד של מסלול מפורט כדי ליצור חוויות שבהן ממשק המשתמש המלא של Navigation SDK לא מתאים, למשל במסכים קטנים. לדוגמה, אפשר להשתמש באפשרות הזו לרוכבי כלי רכב דו-גלגליים, כדי להקרין הנחיות ניווט בלבד שיעזרו להם להגיע ליעדים מהר יותר ובביטחון רב יותר, עם מינימום הסחות דעת.
רכיבי תצוגה חיוניים של הניווט
השדות הראשיים של כל שלב ניווט הם שם הכביש המלא, התמרון והמרחק הכולל של השלב, שזמינים ב-GMSNavigationStepInfo
.
לגבי הנסיעה הכוללת, כדאי להציג את הזמן שנותר ואת המרחק שנותר עד לשלב הנוכחי או ליעד. כל המידע הזה זמין ב-GMSNavigationNavInfo
.
בתמונה שבצד מוצגת דוגמה לרכיבי הניווט החיוניים האלה.
הגדרת מאזין לאירועים
כדי להשתמש בנתונים של ניווט בלבד, צריך להטמיע מאזין לאירועים לאירוע didChangeNavInfo
. בתוך מאזין האירועים, תוכלו לגשת למידע על הנסיעה ועל השלבים כדי לספק למשתמשים ניווט צעד אחר צעד.
כדי להטמיע פונקציות טיפול באירועים, בקר התצוגה של המפה צריך להטמיע את הפרוטוקול GMSNavigatorListener
. מידע מפורט על טיפול באירועים ב-Navigation SDK ל-iOS זמין במאמר האזנה לאירועי ניווט.
טיפול באירוע didChangeNavInfo
כדי להוסיף לאפליקציה תמיכה בניווט מפורט, יוצרים מאזין לאירוע didChangeNavInfo
. במאזין האירועים, משתמשים ברשימה הבאה של כיתות וממשקי Enum כדי לשלוט בניווט מפורט:
GMSNavigationNavInfo
— מידע על מצב הניווט שמוגדר על ידי הכיתה.GMSNavigationStepInfo
— מידע שמוגדר על ידי הכיתה לגבי שלב יחיד במסלול ניווט.GMSNavigationNavState
— Enum שמגדיר את המצב הנוכחי של ניווט, למשל 'בדרך', 'שינוי מסלול' או 'עצירה'.GMSNavigationDrivingSide
— Enum שמגדיר אם השלב הזה נמצא במסלול שבו נוהגים בצד ימין או בצד ימין.GMSNavigationManeuver
— Enum שמגדיר את פעולת הניווט שצריך לבצע, כמו פנייה שמאלה או ימינה.
בהמשך מוצגות דוגמאות למאזני אירועים לאירוע 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];
יצירת סמלים לתמרונים
המאפיין המסווג GMSNavigationManeuver
מגדיר כל תמרון אפשרי שיכול להתרחש במהלך הניווט, ואפשר לקבל את התמרון של שלב נתון מהמאפיין maneuver
של GMSNavigationStepInfo
.
צריך ליצור סמלי תמרון ולהתאימם לתמרונים המשויכים.
לחלק מהפעולות אפשר להגדיר מיפוי אחד-לאחד לסמל, כמו GMSNavigationManeuverDestinationLeft
ו-GMSNavigationManeuverDestinationRight
. עם זאת, מכיוון שלתמרונים מסוימים יש מאפיינים משותפים עם תמרונים אחרים, יכול להיות שתרצו למפות יותר מתמרון אחד לסמל אחד. לדוגמה, אפשר למפות את GMSNavigationManeuverTurnLeft
וגם את GMSNavigationManeuverOnRampLeft
לסמל של פנייה שמאלה.
חלק מהתמרונים מכילים תווית נוספת של 'בכיוון השעון' או 'בכיוון ההפוך לשעון', שה-SDK קובע על סמך צד הנסיעה במדינה. לדוגמה, במדינות שבהן נוהגים בצד ימין של הכביש, נהגים מבצעים פנייה עגולה או פניית U בכיוון השעון, ואילו במדינות שבהן נוהגים בצד ימין של הכביש, נהגים מבצעים פנייה עגולה או פניית 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];