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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • GMSNavigationDrivingSide — عنصر مصنّف يحدّد ما إذا كانت هذه الخطوة على مسار يُسمَح فيه بالقيادة على اليمين أو اليسار.

  • GMSNavigationManeuver : فهرس يحدِّد إجراء التنقّل الذي يجب اتّخاذه، مثل الانعطاف لليسار أو الانعطاف لليسار.

في ما يلي أمثلة على أدوات معالجة الحدث didChangeNavInfo:

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

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

استخدِم سمة 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}]

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

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