รายละเอียดเกี่ยวกับฟีดข้อมูลแบบเลี้ยวต่อเลี้ยว

ฟีดข้อมูลแบบเลี้ยวต่อเลี้ยวจะให้ข้อมูลการนำทางเท่านั้นแก่อุปกรณ์ที่ไม่ได้ออกแบบมาเพื่อคำแนะนำการนำทางตามแผนที่ โดยจะแสดงการบังคับทิศทางที่กำลังจะเกิดขึ้นพร้อมองค์ประกอบที่คุณระบุ ดังนี้

  • ไอคอน (ซ้าย ขวา ยูเทิร์น)
  • หมายเลขทางออกในวงเวียน
  • ชื่อถนน
  • ระยะทางและเวลาโดยประมาณไปยังขั้นตอนการนำทางถัดไปหรือจุดหมายปลายทาง

คุณสามารถใช้ฟีดแบบเลี้ยวต่อเลี้ยวเพื่อสร้างประสบการณ์ที่ UI ของ Navigation SDK แบบเต็มไม่เหมาะสม เช่น สำหรับจอแสดงผลขนาดเล็ก ตัวอย่างเช่น คุณอาจใช้ฟีเจอร์นี้กับผู้ขับขี่ยานพาหนะ 2 ล้อ โดยสามารถแสดงคำแนะนำเฉพาะการนำทางเพื่อช่วยให้ผู้ขับขี่ไปถึงจุดหมายได้เร็วขึ้นและมั่นใจมากขึ้นโดยมีสิ่งรบกวนสมาธิน้อยที่สุด

องค์ประกอบการแสดงผลการนำทางที่จำเป็น

หน้าจอมือถือที่แสดงการเลี้ยวขวาข้างหน้าในระยะ 50 ฟุตเข้าสู่ถนน Church Street ที่ด้านล่างของหน้าจอ เวลาที่เหลือจนถึงจุดหมายคือ 13 นาที และระยะทางที่เหลือคือ 2.1 ไมล์

ช่องหลักสำหรับแต่ละขั้นตอนการนำทางคือชื่อถนนแบบเต็ม การบังคับทิศทาง และระยะทางรวมของขั้นตอน ซึ่งมีอยู่ใน GMSNavigationStepInfo

สำหรับการเดินทางโดยรวม คุณอาจต้องการแสดงเวลาและระยะทางที่เหลือไปยังขั้นตอนปัจจุบันหรือไปยังจุดหมาย ซึ่งทั้งหมดนี้มีอยู่ใน GMSNavigationNavInfo รูปภาพทางด้านขวาแสดงตัวอย่างองค์ประกอบการนําทางที่สําคัญเหล่านี้

ตั้งค่า Listener เหตุการณ์

หากต้องการใช้ข้อมูลการนําทางเท่านั้น คุณต้องใช้ Listener เหตุการณ์สําหรับเหตุการณ์ didChangeNavInfo ภายใน Listener เหตุการณ์ ให้เข้าถึงข้อมูลการเดินทางและขั้นตอนเพื่อแสดงการนำทางแบบเลี้ยวต่อเลี้ยวแก่ผู้ใช้

หากต้องการใช้ตัวแฮนเดิลเหตุการณ์ ตัวควบคุมมุมมองของแผนที่จะต้องใช้โปรโตคอล GMSNavigatorListener ดูข้อมูลโดยละเอียดเกี่ยวกับการจัดการเหตุการณ์ใน Navigation SDK สำหรับ iOS ได้ที่หัวข้อฟังเหตุการณ์การนำทาง

การจัดการเหตุการณ์ didChangeNavInfo

สร้าง Listener สำหรับเหตุการณ์ didChangeNavInfo เพื่อเพิ่มการรองรับแบบเลี้ยวต่อเลี้ยวลงในแอป ใน Listener เหตุการณ์ ให้ใช้คลาสและ Enum ต่อไปนี้เพื่อควบคุมการนำทางแบบเลี้ยวต่อเลี้ยว

  • GMSNavigationNavInfo — คลาสที่กำหนดข้อมูลเกี่ยวกับสถานะการนำทาง

  • GMSNavigationStepInfo - คลาสที่กำหนดข้อมูลเกี่ยวกับขั้นตอนเดียวตามเส้นทางการนำทาง

  • GMSNavigationNavState - Enum ที่กำหนดสถานะปัจจุบันของการนำทาง เช่น อยู่ระหว่างทาง กำลังเปลี่ยนเส้นทาง หรือหยุด

  • GMSNavigationDrivingSide - Enum ที่กำหนดว่าขั้นตอนนี้อยู่ในเส้นทางขับรถชิดขวาหรือขับรถชิดซ้าย

  • GMSNavigationManeuver - Enum ที่กำหนดการดำเนินการนำทางที่จะทำ เช่น เลี้ยวซ้ายหรือเลี้ยวขวา

ด้านล่างนี้คือตัวอย่าง Listener เหตุการณ์สำหรับเหตุการณ์ 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 เพื่อดูสถานะปัจจุบันของการนำทาง ซึ่งเป็นสถานะใดสถานะหนึ่งต่อไปนี้

  • Enroute - สถานะ 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

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 อย่างไรก็ตาม เนื่องจากบางท่าทางสัมผัสมีลักษณะร่วมกับท่าทางสัมผัสอื่นๆ คุณจึงอาจต้องแมปท่าทางสัมผัสมากกว่า 1 รายการกับไอคอนเดียว เช่น 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];