به رویدادهای ناوبری گوش دهید

از این راهنما برای فعال کردن برنامه خود برای گوش دادن و پاسخ به رویدادهای مختلفی استفاده کنید که با حرکت کاربر در مسیر تغییر می کند. این راهنما تعریف مسیر را پوشش نمی دهد، فقط به رویدادهای یک مسیر پاسخ می دهد.

نمای کلی

Navigation SDK برای iOS شنوندگان مرتبط با موقعیت کاربر و شرایط در طول مسیر و داده های مهم زمان و مسافت را در اختیار شما قرار می دهد. در کنترل‌کننده نمای نقشه، برنامه شما باید پروتکل‌هایی را برای این شنوندگان بپذیرد: GMSRoadSnappedLocationProviderListener و GMSNavigatorListener .

این لیست روش های شنونده موجود برای رویدادهای ناوبری را نشان می دهد:

کد را ببینید

اعلام انطباق با پروتکل های مورد نیاز

قبل از اجرای روش‌های ناوبری، کنترل‌کننده view باید پروتکل‌های زیر را اتخاذ کند:

سویفت

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

هدف-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

پس از اتخاذ پروتکل های ناوبری، شنوندگان را روی کنترلر View قرار دهید. برای مثال می توانید کد زیر را به متد viewDidLoad() اضافه کنید.

سویفت

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

هدف-C

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

دریافت یا توقف به‌روزرسانی‌های مکان

به‌روزرسانی‌های مکان برای نشان دادن پیشرفت کاربر روی نقشه مورد نیاز است.

نمونه location ویژگی های زیر را نشان می دهد:

ملک موقعیت مکانی توضیحات
ارتفاع ارتفاع فعلی.
مختصات. عرض جغرافیایی مختصات عرض جغرافیایی کنونی شکسته شده در جاده.
مختصات.طول جغرافیایی مختصات طول جغرافیایی کنونی شکسته شده.
دوره بلبرینگ جریان بر حسب درجه
سرعت سرعت فعلی.
مهر زمانی تاریخ/زمان خواندن فعلی

برای دریافت به‌روزرسانی‌های مستمر مکان، با mapView.roadSnappedLocationProvider.startUpdatingLocation تماس بگیرید و GMSRoadSnappedLocationProviderListener برای مدیریت رویداد didUpdateLocation استفاده کنید.

مثال زیر فراخوانی startUpdatingLocation را نشان می دهد:

سویفت

mapView.roadSnappedLocationProvider.startUpdatingLocation()

هدف-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

کد زیر یک GMSRoadSnappedLocationProviderListener ایجاد می کند که رویداد didUpdateLocation را مدیریت می کند.

سویفت

func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }

هدف-C

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

برای دریافت به‌روزرسانی‌های مکان زمانی که برنامه در پس‌زمینه است، allowsBackgroundLocationUpdates روی true تنظیم کنید:

سویفت

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

هدف-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

تشخیص رویدادهای ورود

برنامه شما از رویداد didArriveAtWaypoint برای تشخیص اینکه چه زمانی به مقصد رسیده است استفاده می کند. می توانید با فراخوانی continueToNextDestination() و سپس فعال کردن مجدد راهنما، راهنمایی را از سر بگیرید و به ایستگاه بعدی بروید. برنامه شما باید پس از فراخوانی continueToNextDestination() راهنما را دوباره فعال کند.

پس از تماس برنامه continueToNextDestination ، ناوبر دیگر اطلاعاتی درباره مقصد قبلی ندارد. اگر می‌خواهید اطلاعات مربوط به یک مسیر را تجزیه و تحلیل کنید، باید قبل از فراخوانی continueToNextDestination() آن را از ناوبر بازیابی کنید.

مثال کد زیر روشی را برای مدیریت رویداد didArriveAtWaypoint نشان می دهد:

سویفت

func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

هدف-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 می توانید به مسیر جدید دسترسی پیدا کنید.

سویفت

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

هدف-C

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

دریافت زمان به‌روزرسانی‌های مقصد

برای دریافت زمان پیوسته به‌روزرسانی‌های مقصد، روشی برای مدیریت رویداد didUpdateRemainingTime ایجاد کنید. پارامتر time زمان تخمینی را در ثانیه تا رسیدن به مقصد بعدی ارائه می دهد.

سویفت

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

هدف-C

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

برای تنظیم حداقل تغییر در زمان تخمینی به مقصد بعدی، ویژگی timeUpdateThreshold را در GMSNavigator تنظیم کنید. مقدار در ثانیه مشخص می شود. اگر این ویژگی تنظیم نشده باشد، سرویس ها از مقدار پیش فرض یک ثانیه استفاده می کنند.

سویفت

navigator?.timeUpdateThreshold = 10

هدف-C

navigator.timeUpdateThreshold = 10;

دریافت به روز رسانی فاصله تا مقصد

برای دریافت به‌روزرسانی‌های مسافت مداوم تا مقصد، روشی برای مدیریت رویداد didUpdateRemainingDistance ایجاد کنید. پارامتر distance ، فاصله تخمین زده شده را تا مقصد بعدی بر حسب متر ارائه می کند.

سویفت

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

هدف-C

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

برای تنظیم حداقل تغییر در فاصله تخمینی تا مقصد بعدی، ویژگی distanceUpdateThreshold را در GMSNavigator تنظیم کنید (مقدار بر حسب متر مشخص شده است). اگر این ویژگی تنظیم نشده باشد، سرویس ها از مقدار پیش فرض یک متر استفاده می کنند.

سویفت

navigator?.distanceUpdateThreshold = 100

هدف-C

navigator.distanceUpdateThreshold = 100;

دریافت به روز رسانی ترافیک

برای دریافت به‌روزرسانی‌های مداوم جریان ترافیک برای مسیر باقی‌مانده، روشی برای مدیریت رویداد didUpdateDelayCategory ایجاد کنید. تماس با delayCategoryToNextDestination GMSNavigationDelayCategory را برمی‌گرداند که مقدار 0 تا 3 را ارائه می‌کند. به‌روزرسانی‌های دسته براساس موقعیت فعلی کاربر برنامه است. اگر داده های ترافیک در دسترس نباشد، GMSNavigationDelayCategory 0 را برمی گرداند. اعداد 1-3 نشان دهنده افزایش جریان از سبک به سنگین است.

سویفت

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }

هدف-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 ایجاد کنید.

سویفت

// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

هدف-C

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

تغییر حالت نورپردازی پیشنهادی

برای دریافت به‌روزرسانی‌ها برای تغییرات تخمینی نور، روشی برای مدیریت رویداد didChangeSuggestedLightingMode ایجاد کنید.

سویفت

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

هدف-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; }