Rota bilgisi alın

Uygulamanızı, mevcut rotanın sürelerini, mesafelerini ve rota ayaklarını alacak şekilde ayarlamak için bu kılavuzu uygulayın.

Genel Bakış

Mevcut rota hakkında bilgi edinmek için navigator örneğinden uygun mülkü alın:

Kodu görüntüleme

Bir sonraki varış noktasına ulaşma süresi

Bir sonraki varış noktasına ulaşmak için gereken süreyi öğrenmek üzere timeToNextDestination() numaralı telefonu arayın. Bu, NSTimeInterval değerini döndürür. Aşağıdaki örnekte bir sonraki hedefe ulaşmak için gereken sürenin nasıl kaydedildiği gösterilmektedir:

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

Bir sonraki hedefe olan mesafeyi öğrenme

Bir sonraki hedefe olan mesafeyi öğrenmek için distanceToNextDestination() numarasını arayın. Bu, CLLocationDistance değerini döndürür. Birimler metre cinsinden belirtilir.

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

Sonraki varış noktasına ilişkin trafik koşullarını alma

Trafiğin bir sonraki hedefe akışını gösteren bir değer almak için delayCategoryToNextDestination işlevini çağırın. Bu parametre GMSNavigationDelayCategory değerini döndürür. Aşağıdaki örnekte, sonucu değerlendirme ve trafik mesajı kaydetme işlemi gösterilmektedir:

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

Mevcut etap hakkında bilgi edinme

Mevcut rota ayağı hakkında bilgi almak için currentRouteLeg işlevini kullanın. Bu işlem, aşağıdaki bilgileri alabileceğiniz bir GMSRouteLeg örneği döndürür:

  • Ayağın hedefi.
  • Ayaktaki son koordinat.
  • Rota ayağını oluşturan koordinatları içeren yol.

Aşağıdaki örnekte, sonraki rota ayağı için başlığın ve enlem/boylam koordinatlarının nasıl kaydedileceği gösterilmektedir:

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

En son gidilen yolu alma

En son gidilen yolu almak için traveledPath işlevini çağırın. Bu işlem, gereksiz noktaları kaldırmak için basitleştirilmiş bir GMSPath örneği döndürür (ör. birbirini izleyen eşdoğrusal noktaları tek bir çizgi parçasına dönüştürme). Bu yol, rehberlik başlatılana kadar boştur. Aşağıdaki örnekte, en son gidilen yolun nasıl alındığı gösterilmektedir:

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