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

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

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

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

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

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

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

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

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

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

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

إرشادات الممرات

تمثل حزمة 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 من Google.

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 يحدد enum كل مناورة محتملة قد تحدث أثناء التنقل، الحصول على المناورة لخطوة معيّنة من السمة maneuver في GMSNavigationStepInfo

يجب عليك إنشاء أيقونات مناورة وإقرانها مع المناورات المرتبطة بها. بالنسبة لبعض المناورات، يمكنك إعداد تعيين فردي لأيقونة، مثل GMSNavigationManeuverDestinationLeft و GMSNavigationManeuverDestinationRight ومع ذلك، نظرًا لأن بعض المناورات تشارك والخصائص مع المناورات الأخرى، فقد ترغب في رسم أكثر من خريطة الانتقال إلى أيقونة واحدة. على سبيل المثال GMSNavigationManeuverTurnLeft و يمكن ربط كلّ من GMSNavigationManeuverOnRampLeft برمز الانعطاف إلى اليسار.

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

استخدام الرموز التي تم إنشاؤها

تدعم حزمة SDK للتنقل إنشاء رموز المناورة GMSNavigationStepInfo تناسب هذه الرموز ميزة تحديد حجم الصور في CarPlay من Google.

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