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

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

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

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

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

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

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

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

یک شنونده رویداد تنظیم کنید

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

برای پیاده‌سازی کنترل‌کننده‌های رویداد، کنترل‌کننده نمای نقشه باید پروتکل GMSNavigatorListener را پیاده‌سازی کند. برای اطلاعات دقیق در مورد مدیریت رویدادها در Navigation SDK برای iOS، به Listen for navigation events مراجعه کنید.

مدیریت رویداد didChangeNavInfo

برای افزودن پشتیبانی نوبت به نوبت به برنامه خود، یک شنونده (listener) برای رویداد didChangeNavInfo ایجاد کنید. در شنونده رویداد، از کلاس‌ها و enumهای زیر برای کنترل پیمایش نوبت به نوبت استفاده کنید:

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

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

  • GMSNavigationNavState — یک نوع داده شمارشی (Enum) که وضعیت فعلی یک ناوبری، مانند ادامه مسیر، تغییر مسیر یا توقف را تعریف می‌کند.

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

  • GMSNavigationManeuver — یک Enum که عمل ناوبری مورد نظر را تعریف می‌کند، مانند چرخش به چپ یا چرخش به راست.

در زیر نمونه‌هایی از شنونده‌های رویداد برای رویداد didChangeNavInfo نشان داده شده است:

سویفت

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

  • تغییر مسیر - 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}]

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

کیت توسعه نرم‌افزار ناوبری (Navigation SDK) از تولید تصاویر خطوط برای هر مرحله ناوبری، همانطور که توسط GMSNavigationStepInfo ارائه می‌شود، پشتیبانی می‌کند. این آیکون‌ها با راهنمای اندازه تصویر CarPlay مطابقت دارند.

سویفت

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 هر مانور ممکنی را که می‌تواند هنگام پیمایش رخ دهد، تعریف می‌کند و می‌توانید مانور مربوط به یک گام مشخص را از ویژگی maneuver مربوط به GMSNavigationStepInfo دریافت کنید.

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

برخی از مانورها حاوی برچسب اضافی «در جهت عقربه‌های ساعت» یا «در خلاف جهت عقربه‌های ساعت» هستند که SDK بر اساس سمت رانندگی یک کشور تعیین می‌کند. به عنوان مثال، در کشورهایی که رانندگی در سمت چپ جاده است، رانندگان در جهت عقربه‌های ساعت دور می‌زنند یا دور می‌زنند، در حالی که در کشورهایی که رانندگی در سمت راست جاده است، رانندگان در خلاف جهت عقربه‌های ساعت حرکت می‌کنند. 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

استفاده از آیکون‌های تولید شده

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

سویفت

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];