اطلاعات مسیر را دریافت کنید

برای تنظیم برنامه خود جهت بازیابی زمان‌ها، مسافت‌ها و بخش‌های مسیر برای مسیر فعلی، این راهنما را دنبال کنید.

نمای کلی

برای دریافت اطلاعات در مورد مسیر فعلی، ویژگی مناسب را از نمونه navigator دریافت کنید:

کد را ببینید

زمان رسیدن به مقصد بعدی

برای دریافت زمان تا مقصد بعدی، تابع timeToNextDestination() را فراخوانی کنید. این تابع یک مقدار NSTimeInterval را برمی‌گرداند. مثال زیر ثبت زمان تا مقصد بعدی را نشان می‌دهد:

سویفت

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

هدف-سی

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 برمی‌گرداند. واحدها بر حسب متر مشخص می‌شوند.

سویفت

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

هدف-سی

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

دریافت شرایط ترافیکی به مقصد بعدی

برای دریافت مقداری که نشان‌دهنده‌ی جریان ترافیک به مقصد بعدی است، تابع delayCategoryToNextDestination را فراخوانی کنید. این پارامتر GMSNavigationDelayCategory را برمی‌گرداند. مثال زیر ارزیابی نتیجه و ثبت یک پیام ترافیک را نشان می‌دهد:

سویفت

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

هدف-سی

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 را برمی‌گرداند که می‌توانید از آن موارد زیر را دریافت کنید:

  • مقصد برای پا.
  • مختصات نهایی در پا.
  • مسیری که شامل مختصاتی است که بخش مسیر را تشکیل می‌دهند.

مثال زیر ثبت عنوان و مختصات lat/lng را برای بخش بعدی مسیر نشان می‌دهد:

سویفت

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!)
}

هدف-سی

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 را برمی‌گرداند که برای حذف نقاط اضافی ساده‌سازی شده است (برای مثال، تبدیل نقاط هم‌خط متوالی به یک پاره خط). این مسیر تا زمان شروع هدایت، خالی است. مثال زیر دریافت آخرین مسیر طی شده را نشان می‌دهد:

سویفت

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))")
  }
}

هدف-سی

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