تفاصيل حول خلاصة البيانات المفصّلة

تقدّم خلاصة بيانات الاتّجاهات المفصّلة معلومات التنقّل فقط إلى الأجهزة غير المصمّمة لتقديم إرشادات التنقّل المستندة إلى الخريطة. وتوفّر المناورات القادمة مع العناصر التي تقدّمها:

  • الرموز (يسار، يمين، انعطاف على شكل حرف U)
  • أرقام المنعطفات في الدوّارات
  • أسماء الطرق
  • المسافات والوقت المقدَّرَين للوصول إلى خطوة التنقّل التالية أو الوجهة النهائية

يمكنك استخدام خلاصة التوجيه خطوة بخطوة لإنشاء تجارب لا تكون فيها واجهة مستخدم حزمة تطوير البرامج (SDK) الكاملة الخاصة بخدمة Navigation مناسبة، مثل شاشات العرض الصغيرة. على سبيل المثال، يمكنك استخدام هذه الميزة مع سائقي المركبات ذات العجلتين، حيث يمكنك عرض إرشادات التنقّل فقط لمساعدتهم في الوصول إلى وجهاتهم بشكل أسرع وبثقة أكبر مع الحدّ من عوامل التشتيت.

عناصر عرض التنقّل الأساسية

شاشة جهاز جوّال تعرض منعطفًا قادمًا إلى اليمين بعد 15 مترًا تقريبًا إلى شارع Church. في أسفل الشاشة، الوقت المتبقّي للوصول إلى الوجهة هو 13 دقيقة، والمسافة المتبقية هي 2.1 ميل.

الحقول الأساسية لكل خطوة من خطوات التنقّل هي اسم الطريق الكامل والمناورة والمسافة الإجمالية للخطوة، وهي متاحة في GMSNavigationStepInfo.

بالنسبة إلى الرحلة بشكل عام، قد تحتاج إلى عرض الوقت والمسافة المتبقّيَين للوصول إلى الخطوة الحالية أو إلى الوجهة، وكل ذلك متاح في GMSNavigationNavInfo. تعرض الصورة على اليسار مثالاً على عناصر التنقّل الأساسية هذه.

إعداد أداة معالجة الأحداث

لاستخدام بيانات التنقّل فقط، عليك تنفيذ أداة معالجة الأحداث للحدث didChangeNavInfo. ضمن معالج الأحداث، يمكنك الوصول إلى معلومات الرحلة والخطوات لتوفير ميزة التنقّل خطوة بخطوة للمستخدمين.

لتنفيذ معالجات الأحداث، يجب أن تنفّذ وحدة التحكّم في عرض الخريطة البروتوكول GMSNavigatorListener. للحصول على معلومات مفصّلة حول معالجة الأحداث في Navigation SDK لنظام التشغيل iOS، يُرجى الاطّلاع على الاستماع إلى أحداث التنقّل.

التعامل مع الحدث didChangeNavInfo

أنشئ أداة معالجة للحدث didChangeNavInfo لإضافة ميزة التنقّل خطوة بخطوة إلى تطبيقك. في أداة معالجة الحدث، استخدِم الفئات والتعدادات التالية للتحكّم في التنقّل خطوة بخطوة:

  • GMSNavigationNavInfo — فئة تحدّد معلومات عن حالة التنقّل.

  • GMSNavigationStepInfo — فئة تحدّد معلومات حول خطوة واحدة على طول مسار التنقّل.

  • GMSNavigationNavState: تعداد يحدّد الحالة الحالية للتنقّل، مثل في الطريق أو إعادة التوجيه أو متوقف.

  • 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
          ...
        }
      }
    }
  }

Objective-C

  // 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 إلى محو عرض معلومات التنقّل لمنع عرض تعليمات الخطوات المتبقية.

توجيه خط السير

تمثّل حزمة تطوير البرامج (SDK) الخاصة بخدمة Navigation المسارات في بطاقة الانعطاف الخاصة بالتنقل كعناصر بيانات 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)
      

Objective-C

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 هذا التصنيف استنادًا إلى جهة القيادة في البلد. على سبيل المثال، في البلدان التي تكون فيها القيادة على الجانب الأيسر من الطريق، يتّخذ السائقون دوارًا أو منعطفًا على شكل حرف U في اتجاه عقارب الساعة، بينما تتّخذ البلدان التي تكون فيها القيادة على الجانب الأيمن من الطريق دورانًا عكس اتجاه عقارب الساعة. ترصد حزمة تطوير البرامج (SDK) الخاصة بخدمة 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)
      

Objective-C

GMSNavigationStepInfo *stepInfo = navInfo.currentStep;

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

UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];