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

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

סקירה כללית

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

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

להצגת הקוד

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

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

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

לאחר אימוץ פרוטוקולים של ניווט, מגדירים את המאזינים לתצוגה גרפי. לדוגמה, אפשר להוסיף את הקוד הבא אל 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 startUpdatingLocation];

הקוד הבא יוצר 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, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
    arrived at: %@", waypoint.title); [_mapView.navigator
    continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

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

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

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }

Objective-C

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

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

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

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }

Objective-C

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

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

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

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

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

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
    distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
    next destination: %.2f.", miles]); }

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

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

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

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

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow 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 to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

Objective-C

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

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

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

Swift

// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")

 // Make the suggested change. mapView.lightingMode = lightingMode }

Objective-C

// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);

 // Make the suggested change. _mapView.lightingMode = lightingMode; }