جزئیات مربوط به فید داده‌های گام‌به‌گام

فید داده گام‌به‌گام اطلاعات فقط ناوبری را به دستگاه‌هایی ارائه می‌دهد که برای راهنمایی ناوبری مبتنی بر نقشه طراحی نشده‌اند. این مؤلفه مانورهای پیش‌رو را با عناصری که ارائه می‌دهید فراهم می‌کند:

  • نمادها (چپ، راست، دوربرگردان)
  • دور زدن در میدان‌ها
  • نام جاده‌ها
  • مسافت و زمان تخمینی تا مرحله بعدی پیمایش یا مقصد نهایی

می‌توانید از فید گام‌به‌گام برای ایجاد تجربه‌هایی که در آن‌ها «واسط کاربر کیت توسعه نرم‌افزار» کامل «پیمایش» مناسب نیست، مثل نمایشگرهای کوچک، استفاده کنید. برای مثال، می‌توانید از این مورد برای موتورسواران استفاده کنید، جایی که می‌توانید راهنمایی فقط ناوبری را برای کمک به آن‌ها در رسیدن به مقصدشان سریع‌تر و با اطمینان بیشتر با حداقل حواس‌پرتی ارائه دهید.

عناصر نمایش ضروری پیمایش

صفحه تلفن همراهی که پیچیدن به راست در ۵۰ فوتی به خیابان چرچ را نشان می‌دهد. در پایین صفحه، زمان باقی‌مانده تا مقصد ۱۳ دقیقه و فاصله باقی‌مانده ۲٫۱ مایل است.

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

برای کل سفر، ممکن است بخواهید زمان و مسافت باقی‌مانده تا مرحله فعلی یا مقصد را نمایش دهید که همه این موارد در GMSNavigationNavInfo دردسترس است. تصویر سمت چپ نمونه‌ای از این عناصر ضروری پیمایش را نشان می‌دهد.

راه‌اندازی کردن شنونده رویداد

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

برای پیاده‌سازی کنترل‌کننده‌های رویداد، کنترل‌کننده نمای نقشه باید GMSNavigatorListener پروتکل را پیاده‌سازی کند. برای اطلاعات دقیق درباره مدیریت رویدادها در «کیت توسعه نرم‌افزار پیمایش برای iOS»، به شنیدن رویدادهای پیمایش مراجعه کنید.

درحال رسیدگی به رویداد didChangeNavInfo

برای رویداد didChangeNavInfo شنونده‌ای ایجاد کنید تا پشتیبانی گام‌به‌گام را به برنامه‌تان اضافه کنید. در شنونده رویداد، از کلاس‌ها و شمارش‌های زیر برای کنترل ناوبری گام‌به‌گام استفاده کنید:

  • GMSNavigationNavInfo — کلاسی که اطلاعات مربوط به وضعیت ناوبری را تعریف می‌کند.

  • GMSNavigationStepInfo — کلاس تعریف‌کننده اطلاعات درباره یک مرحله در مسیر پیمایش.

  • GMSNavigationNavState — Enum defining the current state of a navigation, such as enroute, rerouting, or stopped.

  • GMSNavigationDrivingSide — شمارشی که مشخص می‌کند این مرحله در مسیر راست‌گرد یا چپ‌گرد است.

  • GMSNavigationManeuver — شمارشی که کنش پیمایش را برای انجام تعریف می‌کند، مثلاً به چپ بپیچید یا به راست بپیچید.

در زیر، شنوندگان رویداد نمونه برای رویداد 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
          ...
        }
      }
    }
  }

آبجکتیو-سی

  // 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 یعنی ناوبری گام‌به‌گام فعال است و کاربر در مسیر ارائه‌شده قرار دارد. اطلاعات مربوط به مرحله مانور پیش‌رو دردسترس است.

  • Rerouting - GMSNavigationNavStateRerouting یعنی ناوبری درحال انجام است، اما ناوبر به‌دنبال مسیر جدیدی می‌گردد. مرحله مانور پیش‌رو دردسترس نیست، زیرا هنوز مسیر جدیدی وجود ندارد.

  • متوقف شد - GMSNavigationNavStateStopped یعنی ناوبری پایان یافته است. برای مثال، وقتی کاربر از ناوبری در برنامه خارج می‌شود، ناوبری متوقف می‌شود. در برنامه نمونه، حالت GMSNavigationNavStateStopped نمایش اطلاعات ناوبری را پاک می‌کند تا از نمایش دستورالعمل‌های گام‌به‌گام باقی‌مانده جلوگیری شود.

راهنمای باند

«کیت توسعه نرم‌افزار پیمایش» لاین‌ها را در کارت پیچ پیمایش به‌صورت اشیاء داده 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}]

تصاویر راهنمای باند

کیت توسعه نرم‌افزار پیمایش از تولید تصاویر خط برای هر مرحله پیمایش همان‌طور که توسط GMSNavigationStepInfo منتقل می‌شود پشتیبانی می‌کند. این نمادها با راهنمای اندازه تصویر CarPlay مطابقت دارند.

Swift

let currentStepInfo = navInfo.currentStep

let options = GMSNavigationStepImageOptions()
options.maneuverImageSize = .square96
options.screenMetrics = UIScreen.mainScreen

let maneuverImage = currentStepinfo.maneuverImage(options: options)
      

آبجکتیو-سی

GMSNavigationStepInfo *stepInfo = navInfo.currentStep;

GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init];
options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96;
options.screenMetrics = UIScreen.mainScreen;

UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
      

درحال ایجاد نمادها برای مانورها

نماد مانور

GMSNavigationManeuver enum هر مانور ممکنی را که می‌تواند درحین پیمایش رخ دهد تعریف می‌کند و شما می‌توانید مانور را برای یک مرحله معین از ویژگی maneuver GMSNavigationStepInfo دریافت کنید.

باید نمادهای مانور ایجاد کنید و آن‌ها را با مانورهای مرتبطشان جفت کنید. برای برخی‌از مانورها، می‌توانید یک نگاشت یک‌به‌یک به نماد تنظیم کنید، مثلاً GMSNavigationManeuverDestinationLeft و GMSNavigationManeuverDestinationRight. بااین‌حال، ازآنجایی‌که برخی‌از مانورها ویژگی‌های مشترکی با مانورهای دیگر دارند، بهتر است بیش‌از یک مانور را به یک نماد واحد اختصاص دهید. برای مثال، GMSNavigationManeuverTurnLeft و GMSNavigationManeuverOnRampLeft می‌توانند هر دو به نماد گردش به چپ نگاشت شوند.

برخی‌از مانورها حاوی برچسب اضافی «ساعت‌گرد» یا «پادساعت‌گرد» هستند، که کیت توسعه نرم‌افزار آن را براساس جهت رانندگی در کشور تعیین می‌کند. برای مثال، در کشورهایی که رانندگی در سمت چپ جاده است، رانندگان در جهت ساعت‌گرد وارد میدان می‌شوند یا دور کامل می‌زنند، درحالی‌که در کشورهایی که رانندگی در سمت راست جاده است، در جهت پادساعت‌گرد حرکت می‌کنند. کیت توسعه نرم‌افزار Navigation تشخیص می‌دهد که آیا مانور در ترافیک سمت چپ یا راست رخ می‌دهد و مانور مناسب را خروجی می‌دهد. بنابراین، نماد مانور شما ممکن است برای مانور ساعت‌گرد درمقابل پادساعت‌گرد متفاوت باشد.

ازهم بازکردن برای دیدن نمادهای نمونه برای مانورهای مختلف

نماد نمونه مانورهای گام‌به‌گام
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

استفاده از نمادهای تولیدشده

«کیت توسعه نرم‌افزار پیمایش» از تولید نمادهای مانور برای GMSNavigationStepInfo معین پشتیبانی می‌کند. این نمادها با راهنمای اندازه تصویر CarPlay مطابقت دارند.

Swift

let currentStepInfo = navInfo.currentStep

let options = GMSNavigationStepImageOptions()
options.maneuverImageSize = .square96
options.screenMetrics = UIScreen.mainScreen

let maneuverImage = currentStepinfo.maneuverImage(options: options)
      

آبجکتیو-سی

GMSNavigationStepInfo *stepInfo = navInfo.currentStep;

GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init];
options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96;
options.screenMetrics = UIScreen.mainScreen;

UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];