Mendapatkan informasi rute

Ikuti panduan ini untuk menyiapkan aplikasi Anda guna mengambil waktu, jarak, dan segmen rute untuk rute saat ini.

Ringkasan

Untuk mendapatkan informasi tentang rute saat ini, dapatkan properti yang sesuai dari instance navigator:

Melihat kode

Mendapatkan waktu ke tujuan berikutnya

Untuk mendapatkan waktu ke tujuan berikutnya, panggil timeToNextDestination(). Tindakan ini akan menampilkan nilai NSTimeInterval. Contoh berikut menunjukkan pencatatan waktu ke tujuan berikutnya:

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

Mendapatkan jarak ke tujuan berikutnya

Untuk mendapatkan jarak ke tujuan berikutnya, panggil distanceToNextDestination(). Tindakan ini akan menampilkan nilai CLLocationDistance. Unit ditentukan dalam meter.

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

Mendapatkan kondisi lalu lintas ke tujuan berikutnya

Untuk mendapatkan nilai yang menunjukkan arus traffic ke tujuan berikutnya, panggil delayCategoryToNextDestination. Parameter ini menampilkan GMSNavigationDelayCategory. Contoh berikut menunjukkan cara mengevaluasi hasil dan mencatat pesan traffic:

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

Mendapatkan informasi tentang segmen saat ini

Untuk mendapatkan informasi tentang segmen rute saat ini, panggil currentRouteLeg. Tindakan ini akan menampilkan instance GMSRouteLeg, yang dapat Anda gunakan untuk mendapatkan:

  • Tujuan untuk segmen ini.
  • Koordinat akhir di segmen ini.
  • Jalur yang berisi koordinat yang membentuk segmen rute.

Contoh berikut menunjukkan logging koordinat judul dan lintang/bujur untuk segmen rute berikutnya:

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

Mendapatkan jalur yang terakhir dilalui

Untuk mendapatkan jalur yang terakhir dilalui, panggil traveledPath. Tindakan ini akan menampilkan instance GMSPath yang telah disederhanakan untuk menghapus titik redundan (misalnya, mengubah titik kolinear berurutan menjadi segmen garis tunggal). Jalur ini kosong hingga panduan dimulai. Contoh berikut menunjukkan mendapatkan jalur yang terakhir dilalui:

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