Rota planlama

Bazen, uygulamanızın kullanıcılara sunduğu rotayı planlamak isteyebilirsiniz. Routes API, Routes Preferred API veya Route Optimization API'den bir rota jetonu kullanmak, planladığınız rota için iki şeyi belirtmenize yardımcı olabilir:

  • Rota için çoklu çizgi

  • Rota hedefleriniz

Örneğin, kullanabileceğiniz yönlendirme hedeflerine dair bazı örnekler aşağıda verilmiştir:

  • Teslimat süresini en aza indirme: Yemek teslimatı yapan bir işletme, yemekleri teslim etmenin süresini en aza indirmek isteyebilir.

  • Seyahat süresini veya yakıt tüketimini en aza indirme: Bir lojistik işletmesi, sürücülerinin verimliliğini artırmak ve yakıt maliyetlerini düşürmek isteyebilir.

  • Hedefe ulaşma süresini en aza indirme: Bir servis dağıtım işlemi, operatörlerin bir iş isteğine ulaşma süresini en aza indirmek isteyebilir.

  • Maliyetleri düşürme ve güvenliği artırma: Bir araç paylaşma işletmesi, kullanıcılar için daha düşük maliyetli ve güvenlik nedeniyle belirli bölgelerden kaçınan bir rota bulmak isteyebilir.

Rota jetonu kullanarak rota planlama hakkında daha fazla bilgi için Routes API'deki Rota jetonu isteme ve Route Optimization API'deki Geçiş poli çizgileri ve rota jetonları başlıklı makaleleri inceleyin.

Rota hedefleri için rota jetonu kullanma

Routes API, Routes Preferred API veya Route Optimization API'den alınan bir rota jetonuyla, sağlanan rota üzerinde daha fazla kontrole sahip olursunuz:

  • Mümkün olduğunda Navigasyon SDK'sının kullanması için rotaları önceden planlayın.

  • Navigasyon SDK'sının kullanacağı en iyi rotayı seçin. Routes API'de rota oluştururken rota jetonları isterseniz oluşturulan her rota için bir rota jetonu alırsınız. Ardından, Navigasyon SDK'sına iletirken kullanmak istediğiniz rotanın jetonunu seçebilirsiniz.

  • ETA ve mesafe tahminleri dahil olmak üzere fiyatı önceden tahmin edin. Gerçek maliyet ve süre değişiklik gösterse de bu tahmin, beklenen ile gerçek rota maliyeti arasındaki farkı azaltır.

  • Çevre dostu rota bulma veya en kısa rota gibi daha gelişmiş rota hedefleri belirtin.

Rota jetonlarının işleyiş şekli

Rota hedeflerini kullanarak rota planlamak için Routes API, Routes Preferred API veya Route Optimization API'yi kullanabilirsiniz. Bu API'lerden herhangi birinden döndürülen bir rota jetonunu, aracınızın rotasını belirlemesine rehberlik etmek için Navigasyon SDK'sına iletebilirsiniz.

Rota jetonu isteğinde bulunduğunuzda ve bu jetonu kullandığınızda şunlar gerçekleşir:

  1. Rotalar API'si, Rotalar Tercih Edilen API'si veya Rota Optimizasyonu API'si, rota çoklu çizgisini ve rota hedeflerini içeren şifrelenmiş bir rota jetonu döndürür.

  2. Rota jetonunu Navigation SDK'sına iletirsiniz.

  3. Navigasyon SDK'sı rotayı alır veya değişen koşullar nedeniyle rota kullanılamıyorsa en iyi eşleşen rotayı alır.

  4. Rota üzerinde sürüş yaparken trafik veya diğer yol koşulları değişirse ya da bir araç planlanan rotadan saparsa değiştirilen rotalar, jetondaki rota hedeflerine göre en iyi rotayla eşleşmeye sürekli olarak çalışır.

Bu işlem, gerçek rotanın planlanan rotanıza ne kadar yakın olduğunu en üst düzeye çıkarır.

Planlanan rota neden tam olarak takip edilemeyebilir?

Planladığınız rotayı ve rota hedeflerini, uyulması gereken kurallar olarak düşünün: Bunlar zorunlu değildir. Planladığınız rota ile rehberli navigasyon tarafından sağlanan rota arasında yol koşullarındaki, başlangıç konumundaki veya planlanan rotayı oluşturduktan sonra değişen diğer parametrelerdeki farklılıklar nedeniyle farklılık görebilirsiniz. Bu fark, mesafe ve tahmini varış zamanı gibi önemli seyahat özelliklerinin yanı sıra planladığınız ve gerçek hedefleriniz arasında uyuşmazlığa neden olabilir.

Rota jetonu kullanarak rota planlama

Bir rota jetonu oluşturup ardından aşağıdaki adımlarda açıklandığı gibi Navigasyon SDK'sına ileterek rota planlayabilirsiniz:

1. adım: Rotalar API'sini, Rotalar Tercih Edilen API'sini veya Rota Optimizasyonu API'sini kullanarak rota jetonu oluşturun

  1. Aşağıdaki yöntemlerden birini kullanarak rota jetonu isteyin:

    • Routes API: computeRoutes. Routes API'de rota jetonu isteme hakkında daha fazla bilgi için Rota hesaplama ve Rota jetonu isteme başlıklı makaleleri inceleyin.

    • Routes Preferred API: computeCustomRoutes. Routes Preferred API'de rota jetonu isteme hakkında daha fazla bilgi için Rota planlama başlıklı makaleyi inceleyin.

    • Route Optimization API: optimizeTours veya batchOptimizeTours. Route Optimization API'de rota jetonu isteme hakkında daha fazla bilgi için Geçiş Poli çizgileri ve Rota Jetonları başlıklı makaleyi inceleyin.

  2. Rota jetonu kullanma şartlarını karşılamak için Routes API veya Routes Preferred API isteğinizi oluşturun:

    • travel_mode öğesini DRIVING veya TWO_WHEELER olarak ayarlayın
    • routing_preference öğesini TRAFFIC_AWARE veya TRAFFIC_AWARE_OPTIMAL olarak ayarlayın
    • Via yol işaretlerini KULLANMAYIN

2. Adım: Rota jetonunu Navigasyon SDK'sına iletin

  1. Rota jetonunu depolama: Gezinme SDK'sında, rota jetonunu depolamak için bir dize oluşturun. Örneğin:

    let routeToken = "route token returned by Routes API"

    Döndürülen rota jetonu örneği:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Rota jetonunu oluştururken kullandığınız hedef yol işaretlerini belirterek mapView.navigator setDestinations yöntemini kullanarak rota jetonunu Navigasyon SDK'sına iletin:

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Navigator.setDestinations yöntemi, isteğin durumunu döndürür. Kullanıcının konumundan belirtilen hedefe giden bir rota bulunursa RouteStatus.OK döndürülür.

Bu yöntem hakkında daha fazla bilgi için GMSNavigator.setDestinations sayfasına bakın.

Örnek

Aşağıdaki kod örnekleri, planlanmış bir rotanın nasıl alınacağını gösterir.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

Rota jetonları ile Navigation SDK'sı arasındaki etkileşim

Navigasyon SDK'sı tarafından oluşturulan rota ile rota jetonundaki planlanmış rotanın etkileşimi aşağıdaki gibidir:

  • Daha önce ayarlanmış tüm hedefleri geçersiz kılar.

  • Aracın başlangıç konumunu kullanır.

  • Yol ve trafik koşullarına göre ayarlanır. Planlanmış bir rotanın neden tam olarak takip edilemeyebileceğine bakın.

  • Aşağıdaki yönlendirmeyle ilgili seçenekler gereksiz olduğu için yoksayılır:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Takipler:

    • Yol kenarına tercihi gibi yol noktasıyla ilgili seçenekler.

    • Rota hedefleri. Navigasyon SDK'sının döndürülen rotayı ayarlaması gerekirse rota jetonunu isterken belirttiğiniz rota hedeflerini kullanır. Bu nedenle, Routes API'de belirttiğiniz yol noktasıyla ilgili seçenekleri kullanmanız gerekir.