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