ฟังเหตุการณ์การนําทาง

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

ภาพรวม

Navigation SDK สำหรับ iOS ทำให้คุณได้เป็นผู้ฟัง สถานที่ตั้งของผู้ใช้ รวมถึงเงื่อนไขต่างๆ ที่อยู่ในเส้นทาง และ ข้อมูลเวลาและระยะทางที่สำคัญ ในตัวควบคุมมุมมองของแผนที่ แอปของคุณ ต้องใช้โปรโตคอลสำหรับผู้ฟังเหล่านี้ GMSRoadSnappedLocationProviderListener และ GMSNavigatorListener

รายการนี้จะแสดงวิธีการของผู้ฟังที่ใช้ได้กับเหตุการณ์การนำทาง

ดูโค้ด

ประกาศความสอดคล้องตามโปรโตคอลที่กำหนด

ก่อนที่จะใช้วิธีการนำทาง ตัวควบคุมการดูต้องใช้ โปรโตคอล:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

หลังจากใช้โปรโตคอลการนำทางแล้ว ให้ตั้งค่า Listener ให้เป็นมุมมอง เช่น คุณอาจเพิ่มโค้ดต่อไปนี้ลงใน viewDidLoad()

Swift

mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)

Objective-C

[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];

การรับหรือหยุดการอัปเดตตำแหน่ง

จำเป็นต้องอัปเดตตำแหน่งเพื่อแสดงความคืบหน้าของผู้ใช้บนแผนที่

อินสแตนซ์ location จะแสดงพร็อพเพอร์ตี้ต่อไปนี้

พร็อพเพอร์ตี้ของสถานที่ตั้ง คำอธิบาย
ระดับความสูง ระดับความสูงปัจจุบัน
coordinate.latitude พิกัดละติจูดประกอบถนนในปัจจุบัน
coordinate.longitude พิกัดลองจิจูดของถนนปัจจุบัน
หลักสูตร ทิศทางปัจจุบัน หน่วยเป็นองศา
ความเร็ว ความเร็วปัจจุบัน
การประทับเวลา วันที่/เวลาที่อ่านปัจจุบัน

หากต้องการรับการอัปเดตตำแหน่งอย่างต่อเนื่อง โปรดโทร mapView.roadSnappedLocationProvider.startUpdatingLocation และใช้ GMSRoadSnappedLocationProviderListenerเพื่อจัดการdidUpdateLocation กิจกรรม

ตัวอย่างต่อไปนี้แสดงการเรียกใช้ startUpdatingLocation

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

โค้ดต่อไปนี้จะสร้าง GMSRoadSnappedLocationProviderListener ที่ จัดการเหตุการณ์ didUpdateLocation

Swift

func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }

Objective-C

-   (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
    didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@",
    location.description); }

หากต้องการรับการอัปเดตตำแหน่งเมื่อแอปอยู่ในเบื้องหลัง ให้ตั้งค่า allowsBackgroundLocationUpdates เป็นจริง:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

กำลังตรวจหาเหตุการณ์การมาถึง

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

หลังจากที่แอปเรียก continueToNextDestination ตัวนำทางจะไม่มี ข้อมูลเกี่ยวกับปลายทางก่อนหน้า หากต้องการวิเคราะห์ข้อมูลเกี่ยวกับ ของเส้นทาง คุณต้องดึงข้อมูลนี้จากตัวนำทางก่อนที่จะเรียก continueToNextDestination()

ตัวอย่างโค้ดต่อไปนี้แสดงเมธอดในการจัดการ didArriveAtWaypoint กิจกรรม:

Swift

func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
    arrived at: %@", waypoint.title); [_mapView.navigator
    continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

รับการอัปเดตการเปลี่ยนเส้นทาง

หากต้องการรับการแจ้งเตือนเมื่อมีการเปลี่ยนเส้นทาง ให้สร้างเมธอดเพื่อ จัดการเหตุการณ์ navigatorDidChangeRoute คุณสามารถเข้าถึงเส้นทางใหม่ได้โดย โดยใช้พร็อพเพอร์ตี้ routeLegs และ currentRouteLeg ของ GMSNavigator

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }

Objective-C

-   (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
    has changed."); }

การอัปเดตเวลาไปถึงปลายทาง

หากต้องการรับเวลาในการอัปเดตปลายทางอย่างต่อเนื่อง ให้สร้างเมธอดในการจัดการ didUpdateRemainingTime เหตุการณ์ พารามิเตอร์ time แสดงค่าประมาณ เวลาเป็นวินาที จะถึงจุดหมายถัดไป

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next
    destination: %f", time); }

หากต้องการตั้งค่าการเปลี่ยนแปลงขั้นต่ำของเวลาโดยประมาณสำหรับไปยังปลายทางถัดไป ให้ตั้งค่า ที่พัก timeUpdateThreshold แห่งในวันที่ GMSNavigator ค่าจะระบุไว้ใน วินาที หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้นี้ บริการจะใช้ค่าเริ่มต้นเป็น 1 อย่างที่สอง

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

รับการอัปเดตระยะทางไปถึงจุดหมาย

หากต้องการรับระยะต่อเนื่องไปยังการอัปเดตปลายทาง ให้สร้างเมธอดในการจัดการ เหตุการณ์ didUpdateRemainingDistance พารามิเตอร์ distance จะระบุค่า ระยะทางโดยประมาณเป็นเมตรเพื่อไปยังจุดหมายถัดไป

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
    distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
    next destination: %.2f.", miles]); }

หากต้องการกำหนดการเปลี่ยนแปลงขั้นต่ำของระยะทางโดยประมาณไปยังจุดหมายถัดไป ให้ตั้งค่า พร็อพเพอร์ตี้ distanceUpdateThreshold ใน GMSNavigator (ระบุค่าใน เมตร) หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้นี้ บริการจะใช้ค่าเริ่มต้นเป็น 1 เมตร

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

การรับอัปเดตสภาพการจราจร

หากต้องการรับการอัปเดตสภาพการจราจรของเส้นทางที่เหลืออย่างต่อเนื่อง สร้างเมธอดในการจัดการเหตุการณ์ didUpdateDelayCategory การโทรถึง delayCategoryToNextDestination แสดงผล GMSNavigationDelayCategory ซึ่ง ระบุค่า 0 ถึง 3 การอัปเดตหมวดหมู่จะอิงตาม ตำแหน่งของผู้ใช้แอป หากไม่มีข้อมูลการจราจร GMSNavigationDelayCategory แสดงผล 0 ตัวเลข 1-3 หมายถึงการเพิ่มขึ้น ไหลจากเบาไปยังหนัก

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
    NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }

พร็อพเพอร์ตี้ GMSNavigationDelayCategory จะแสดงระดับความล่าช้าต่อไปนี้

เลื่อนหมวดหมู่ คำอธิบาย
GMSNavigationDelayCategoryNoData 0 - ไม่พร้อมใช้งาน ไม่มีข้อมูลสำหรับการเข้าชม หรือ :
เส้นทาง
GMSNavigationDelayCategoryHeavy 1 - หนัก
GMSNavigationDelayCategoryMedium 2 - ปานกลาง
GMSNavigationDelayCategoryLight 3 - สว่าง

รับการอัปเดตที่รวดเร็วขึ้น

หากต้องการรับข้อมูลอัปเดตเมื่อคนขับใช้ความเร็วเกินขีดจำกัด ให้สร้างเมธอด เพื่อจัดการเหตุการณ์ didUpdateSpeedingPercentage

Swift

// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

Objective-C

// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }

กำลังเปลี่ยนโหมดแสงที่แนะนำ

หากต้องการรับข้อมูลอัปเดตเกี่ยวกับการเปลี่ยนแปลงของการจัดแสงโดยประมาณ ให้สร้างวิธีการจัดการ เหตุการณ์ didChangeSuggestedLightingMode

Swift

// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")

 // Make the suggested change. mapView.lightingMode = lightingMode }

Objective-C

// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);

 // Make the suggested change. _mapView.lightingMode = lightingMode; }