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

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

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

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

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

شاشة جهاز جوّال تعرض منعطفًا قادمًا إلى اليمين بعد 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 إلى محو عرض معلومات التنقّل لمنع عرض تعليمات الخطوات المتبقية.

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

تمثّل حزمة Navigation SDK خطوط السير في بطاقة الانعطاف أثناء التنقّل كـ GMSNavigationLane وكائنات بيانات GMSNavigationLaneDirection. يمثّل الكائن A 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.

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

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