Rota bilgisi alın

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

Genel Bakış

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

Kodu göster

Sonraki varış noktasına ulaşma süresi

Bir sonraki hedefe ne kadar sürede varacağınızı öğrenmek için timeToNextDestination() deyin. Bu işlev 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]);

Sonraki varış noktasına olan mesafe hesaplanıyor

Bir sonraki hedefe olan mesafeyi öğrenmek için distanceToNextDestination() numaralı telefonu 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 giden yoldaki trafik koşulları alınıyor

Trafiğin bir sonraki hedefe akışını gösteren bir değer almak için delayCategoryToNextDestination işlevini çağırın. Bu parametre GMSNavigationDelayCategory 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 etapla ilgili bilgi alma

Mevcut rota ayağı hakkında bilgi almak için currentRouteLeg işlevini çağırın. Bu işlem, aşağıdakileri 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, bir 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 yolun alınması

En son gidilen yolu almak için traveledPath işlevini çağırın. Bu, gereksiz noktaları kaldırmak için basitleştirilmiş bir GMSPath örneği döndürür (ör. birbirini takip eden 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);
}