Rota bilgisi alın

Uygulamanızı, mevcut rotanın saatlerini, mesafelerini ve rota aşamaları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örme

Sonraki varış noktasına ulaşmak için gereken süreyi öğrenme

Bir sonraki hedefe ulaşmak için gereken süreyi öğrenmek üzere timeToNextDestination() numaralı telefonu arayın. Bu işlem bir NSTimeInterval değeri döndürür. Aşağıdaki örnekte, bir sonraki hedefe ulaşma süresinin günlüğe kaydedilmesi 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]);

Sonraki hedefe olan mesafeyi öğrenme

Bir sonraki hedefe olan mesafeyi öğrenmek için distanceToNextDestination() numaralı telefonu arayın. Bu işlem bir CLLocationDistance değeri 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 hedefe yönelik trafik koşullarını alma

Bir sonraki hedefe giden trafik 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, sonucun değerlendirilmesi ve bir trafik mesajının günlüğe kaydedilmesi 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 bölümü hakkında bilgi edinmek için currentRouteLeg numaralı telefonu arayın. Bu işlem, aşağıdakileri alabileceğiniz bir GMSRouteLeg örneği döndürür:

  • Bacağın varış noktası.
  • Ayaktaki son koordinat.
  • Rota ayağını oluşturan koordinatları içeren yol.

Aşağıdaki örnekte, sonraki rota adımı 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 kat edilen yolu almak için traveledPath numaralı telefonu arayın. Bu işlev, gereksiz noktaları kaldırmak için basitleştirilmiş bir GMSPath örneği döndürür (örneğin, art arda gelen doğrusal noktaları tek bir çizgi segmentine dönüştürür). Bu yol, rehberlik başlatılana kadar boştur. Aşağıdaki örnekte en son kat edilen yolun nasıl alınacağı 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);
}