האזנה לאירועי ניווט

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

סקירה

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

ברשימה הזו מוצגות שיטות ההאזנה הזמינות לאירועי ניווט:

להצגת הקוד

הצהרת תאימות לפרוטוקולים הנדרשים

לפני הטמעת שיטות הניווט, בקר התצוגה צריך לאמץ את הפרוטוקולים:

Swift

class ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <gmsnavigatorlistener, gmsroadsnappedlocationproviderlistener=""></gmsnavigatorlistener,>

@end

אחרי אימוץ פרוטוקולי הניווט, הגדירו את המאזינים לבקר התצוגה. לדוגמה, אפשר להוסיף את הקוד הבא ל-method viewDidLoad().

Swift

mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)

Objective-C

[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider addListener:self];

קבלה או הפסקה של עדכוני מיקום

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

המופע של location חושף את המאפיינים הבאים:

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

כדי לקבל עדכוני מיקום רציפים, צריך להתקשר למספר mapView.roadSnappedLocationProvider.startUpdatingLocation ולהשתמש ב-GMSRoadSnappedLocationProviderListener על מנת לטפל באירוע didUpdateLocation.

בדוגמה הבאה מוצגת קריאה ל-startUpdatingLocation:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdateLocation];

הקוד הבא יוצר GMSRoadSnappedLocationProviderListener שמטפל באירוע didUpdateLocation.

Swift

Func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider, didUpdate location: CLLocation) { Print("Location: (location.description)") }

Objective-C

  • (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@", location.description); }

כדי לקבל עדכוני מיקום כשהאפליקציה פועלת ברקע, צריך להגדיר את allowsBackgroundLocationUpdates כ-true:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

מתבצע זיהוי של אירועי הגעה

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

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

הקוד לדוגמה הבא מציג שיטה לטיפול באירוע didArriveAtWaypoint:

Swift

Func navigator(_ navigator: GMSNavigator, didBeforeAt Waypoint: GMSNavigationWaypoint) {print("You have been at: (waypoint.title)") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuidanceActive = true }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didReachAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You’d at: %@", waypoint.title); [_mapView.navigator continueToNextDestination]; _mapView.navigator.guidance} = YES

קבלת עדכונים על שינוי מסלול

כדי לקבל התראה בכל פעם שהמסלול משתנה, צריך ליצור שיטה לטיפול באירוע navigatorDidChangeRoute. אפשר לגשת למסלול החדש באמצעות המאפיינים routeLegs ו-currentRouteLeg של GMSNavigator.

Swift

Func navigatorDidChangeRoute(_ navigator: GMSNavigator) { הדפסה("הנתיב השתנה.") }

Objective-C

  • (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The path has changed."); }

מתקבלים עדכונים לגבי הזמן עד ליעד

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

Swift

Func navigator(_ navigator: GMSNavigator, didUpdateUpdateTime time: TimeInterval) { Print("Time to next destination: (time)") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateUpdateTime:(NSTimeInterval)time { NSLog(@"Time to next destination: %f", time); }

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

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

מתקבלים עדכונים לגבי המרחק ליעד

על מנת לקבל עדכונים לגבי מרחק רציף ליעד, צריך ליצור שיטה לטיפול באירוע didUpdateRemainingDistance. הפרמטר distance מציג את המרחק המשוער במטרים אל היעד הבא.

Swift

unc navigator(_ navigator: GMSNavigator, didUpdateLeftDuration: CLLocation לצבור) { Let miles = נוהג * 0.00062137 Print("מרחק אל היעד הבא: (miles) miles.") }

Objective-C

  • (EV)navigator:(GMSNavigator *)navigator didUpdateDuration to:(CLLocationDuration)distance { double miles = distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"מרחק to היעד הבא: %.2f.", miles]); }

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

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

קבלת עדכוני תנועה

כדי לקבל עדכונים שוטפים של זרימת התנועה במסלול הנותר, צריך ליצור שיטה לטיפול באירוע didUpdateDelayCategory. קריאה ל-delayCategoryToNextDestination מחזירה GMSNavigationDelayCategory שמספקת את הערך בין 0 ל-3. העדכונים בקטגוריה מבוססים על המיקום הנוכחי של המשתמש באפליקציה. אם נתוני התנועה לא זמינים, הפונקציה GMSNavigationDelayCategory מחזירה את הערך 0. המספרים 1-3 מציינים את העלייה בזרימה בין קל לכבד.

Swift

Func navigator(_ navigator: GMSNavigator, didUpdate pausedCategory: GMSNavigationDelayCategory) { Print("Trafficflow to next destination: (delayCategory)") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory { NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }

הנכס GMSNavigationDelayCategory חושף את רמות העיכוב הבאות:

קטגוריית העיכוב תיאור
GMSNavigationDelayCategoryNoData 0 – לא זמין, אין נתונים לגבי תנועה או :
את המסלול.
GMSNavigationDelayCategoryHeavy 1 – כבד.
GMSNavigationDelayCategoryMedium 2 – בינוני.
GMSNavigationDelayCategoryLight 3 – בהיר.

מתקבלים עדכוני מהירות

כדי לקבל עדכונים כשנהג חורג מהמהירות המותרת, צריך ליצור שיטה לטיפול באירוע didUpdateSpeedingPercentage.

Swift

// Listener לטיפול באירועי מהירות. Func navigator( _ navigator: GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) { print("Speed is (percentageAboveLimit) מעל המגבלה.") }

Objective-C

// Listener to Care to find search events. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }

שינוי מצב התאורה המוצע

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

Swift

// מגדירים מאזין לשינויים מוצעים במצב תאורה. Func navigator(_ navigator: GMSNavigator, didChangeOfferLightingMode lightMode: GMSNavigationLightingMode) { הדפסה("הצעה למצב תאורה השתנה: (String(Barding: lightMode))")

// בצע את השינוי המוצע. mapView.lightingMode = lightMode }

Objective-C

// הגדר האזנה להצעות לשינויים במצב תאורה. -(void)navigator:(GMSNavigator *)navigator didChangeOfferLightingMode: (GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested light mode has changed: %ld", (long)lightingMode);

// בצעו את השינוי המוצע. _mapView.lightingMode = lightMode; }