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(). Panggilan ini akan menampilkan nilai NSTimeInterval. Contoh berikut menunjukkan logging 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. Satuan 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 aliran traffic ke tujuan berikutnya, panggil delayCategoryToNextDestination. Parameter ini menampilkan GMSNavigationDelayCategory. Contoh berikut menunjukkan evaluasi hasil dan logging 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 dapatkan:

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

Contoh berikut menunjukkan logging judul dan koordinat 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 baru saja dilalui

Untuk mendapatkan jalur yang baru saja dilalui, panggil traveledPath. Tindakan ini akan menampilkan instance GMSPath yang telah disederhanakan untuk menghapus titik yang berlebihan (misalnya, mengubah titik kolinear berturut-turut menjadi satu segmen garis). Jalur ini kosong hingga panduan dimulai. Contoh berikut menunjukkan cara mendapatkan jalur yang paling baru 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);
}