קבלת מידע על המסלול

מדריך זה מסביר איך להגדיר את האפליקציה כך שתאחזר זמנים, מרחקים ורגלי מסלול במסלול הנוכחי.

סקירה

על מנת לקבל מידע על המסלול הנוכחי, צריך להוריד את המאפיין המתאים מהמכונה של navigator:

להצגת הקוד

מתפנה לך זמן ליעד הבא

כדי לקבל את הזמן ליעד הבא, צריך להתקשר למספר timeToNextDestination(). הפונקציה מחזירה את הערך NSTimeInterval. הדוגמה הבאה מציגה רישום של הזמן עד ליעד הבא:

Swift

if let navigator = mapView.navigator {
  let time = navigator.timeToNextDestination
  let minutes = floor(time/60)
  let seconds = round(time - minutes * 60)
  NSLog("Time to next destination: %.0f:%.0f", minutes, seconds)
}

Objective-C

NSTimeInterval time = _mapView.navigator.timeToNextDestination;
int minutes = floor(time/60);
int seconds = round(time - minutes * 60);
NSLog(@"%@", [NSString stringWithFormat:@"Time to next destination: %i:%i.", minutes, seconds]);

המערכת מחשבת את המרחק ליעד הבא

כדי לקבל את המרחק ליעד הבא, צריך להתקשר למספר distanceToNextDestination(). הפונקציה מחזירה את הערך CLLocationDistance. היחידות מצוינות במטרים.

Swift

if let navigator = mapView.navigator {
  let distance = navigator.distanceToNextDestination
  let miles = distance * 0.00062137
  NSLog("Distance to next destination: %.2f miles.", miles)
}

Objective-C

CLLocationDistance distance = _mapView.navigator.distanceToNextDestination;
double miles = distance * 0.00062137;
NSLog(@"%@", [NSString stringWithFormat:@"Distance to next destination: %.2f.", miles]);

מקבלים את מצב התנועה ליעד הבא

על מנת לקבל ערך שמציין את זרימת התנועה ליעד הבא, אפשר להתקשר למספר delayCategoryToNextDestination. הפרמטר הזה מחזיר GMSNavigationDelayCategory. הדוגמה הבאה מציגה הערכת התוצאה ורישום הודעת התנועה:

Swift

if let navigator = mapView.navigator {
  // insert sample for evaluating traffic value
  let delay = navigator.delayCategoryToNextDestination
  let traffic = "unavailable"
  switch delay {
    case .noData:
      traffic = "unavailable"
    case .heavy:
      traffic = "heavy"
    case .medium:
      traffic = "moderate"
    case .light:
      traffic = "light"
    default:
      traffic = "unavailable"
  }
  print("Traffic is \(traffic).")
}

Objective-C

GMSNavigationDelayCategory delay = mapView.navigator.delayCategoryToNextDestination;
NSString *traffic = @"";

switch (delayCategory) {
    case GMSNavigationDelayCategoryNoData:
      traffic = @"No Data";
      break;
    case GMSNavigationDelayCategoryHeavy:
      traffic = @"Heavy";
      break;
    case GMSNavigationDelayCategoryMedium:
      traffic = @"Medium";
      break;
    case GMSNavigationDelayCategoryLight:
      traffic = @"Light";
      break;
    default:
      NSLog(@"Invalid delay category: %zd", delayCategory);
 }

NSLog(@"%@", [NSString stringWithFormat:@"Traffic is %@.", traffic]);

קבלת מידע על הרגל הנוכחית

כדי לקבל מידע על הקטע הנוכחי במסלול, צריך להתקשר למספר currentRouteLeg. הפעולה הזו מחזירה מופע של GMSRouteLeg, שממנו אפשר לקבל:

  • היעד של הרגל.
  • הקואורדינטה הסופית ברגל.
  • הנתיב המכיל את הקואורדינטות שמהן מורכב הקטע לאורך המסלול.

הדוגמה הבאה מציגה רישום ביומן של הכותרת וקואורדינטות קו רוחב/קו אורך עבור קטע המסלול הבא:

Swift

if let navigator = mapView.navigator {
  let currentLeg = navigator.currentRouteLeg
  let nextDestination = currentLeg?.destinationWaypoint?.title
  let lat = currentLeg?.destinationCoordinate.latitude.description
  let lng = currentLeg?.destinationCoordinate.longitude.description
  NSLog(nextDestination! + ", " + lat! + "/" + lng!)
}

Objective-C

GMSRouteLeg *currentSegment = _mapView.navigator.currentRouteLeg;
NSString *nextDestination = currentSegment.destinationWaypoint.title;
CLLocationDegrees lat = currentSegment.destinationCoordinate.latitude;
CLLocationDegrees lng = currentSegment.destinationCoordinate.longitude;
NSLog(@"%@", [NSString stringWithFormat:@"%@, %f/%f", nextDestination, lat, lng]);

המערכת מקבלת את המסלול האחרון שעברת בו

כדי לקבל את המסלול האחרון שעברתם, יש להתקשר אל traveledPath. הפעולה הזו מחזירה מכונת GMSPath שהופכת לפשוטה יותר כדי להסיר נקודות מיותרות (לדוגמה, ממירה נקודות קו ליניאריות עוקבות לקטע קו יחיד). הנתיב הזה ריק עד שההנחיה מתחילה. הדוגמה הבאה מציגה את הנתיב האחרון שעברתם:

Swift

if let navigator = mapView.navigator {
  let latestPath = navigator.traveledPath
  if latestPath.count() > 0 {
    let begin: CLLocationCoordinate2D = latestPath.coordinate(at: 0)
    let current: CLLocationCoordinate2D = latestPath.coordinate(at: latestPath.count() - 1)
    print("Path from (\(begin.latitude),\(begin.longitude)) to (\(current.latitude),\(current.longitude))")
  }
}

Objective-C

GMSPath *latestPath = mapView.navigator.traveledPath;
if (latestPath.count > 0) {
  CLLocationCoordinate2D begin = [latestPath coordinateAtIndex:0];
  CLLocationCoordinate2D current = [latestPath coordinateAtIndex:latestPath.count - 1];
  NSLog(@"Path from %f/%f to %f/%f",
        begin.latitude,
        begin.longitude,
        current.latitude,
        current.longitude);
}