Seyahat verilerini işleme

Seyahat verilerinizi aldığınızda arka uçunuz, sürücünün seyahat ilerlemesini ayrıntılı olarak açıklayan JSON yükleri alır. Seyahati izlemek, gönderim sistemlerinizi güncellemek ve sürücü ilerledikçe veya bir seyahat sona erdiğinde bir sonraki adımı belirlemek için mevcut seyahat durumlarını yorumlamak üzere bu yükleri ayrıştırın.

Veri yükünü okuma

Google Haritalar veya Waze, sürücü navigasyonu başlattığında, rota boyunca düzenli olarak (varsayılan olarak her 60 saniyede bir) ve sürücü hedefe vardığında yolculuk verileri yüklerini Navigation Connect sunucularına gönderir. Her JSON mesajı, sürücünün yola sabitlenmiş koordinatları, gidilen mesafe ve tahmini varış zamanı (TVZ) dahil olmak üzere ilgili yolculuk verilerini içerir.

Aşağıdaki kod örneğinde, bir sürücünün King's Cross'tan Central St. Giles'a yaptığı bir yolculuk için navigasyonu başlattığı zamana ait bir yolculuk verileri yükü gösterilmektedir.

{
  "name": "projects/123456/trips/221B9CD6-4146-4CBF-9556-853817654938",
  "state": "ENROUTE",
  "execution": {
    "origin": {
      "point": {
        "latitude": 51.5333329,
        "longitude": -0.1265845
      }
    },
    "destination": {
      "point": {
        "latitude": 51.515598,
        "longitude": -0.1277623
      }
    },
    "location": {
      "point": {
        "latitude": 51.5333329,
        "longitude": -0.1265845
      },
      "sourceTime": "2025-05-30T12:37:26Z",
      "serverTime": "2025-05-30T12:37:26.221069Z"
    },
    "traveledDuration": "0s",
    "remainingDuration": "990s",
    "traveledDistanceMeters": 0,
    "remainingDistanceMeters": 2879,
    "stopAddedInRoute": false
  }
}

Etkin gezi durumlarını izleme

Başarılı bir başlangıcı onaylamak ve ilerlemeyi izlemek için her yükteki durum alanını değerlendirin.

Durum Açıklama
NEW Seyahat oluşturuldu ancak sürücü henüz navigasyonu başlatmadı.
ENROUTE Sürücü, hedefe gitmek için aktif olarak navigasyonu kullanıyor. Seyahatin kimliğinin başarıyla doğrulandığını ve seyahatin başarıyla başladığını onaylamak için bu durumu kullanın.

Eklenen durakları yönetme

Sürücüler, navigasyon sırasında rotalarına durak ekleyebilir. Bu durumda, Navigation Connect, JSON veri yükünde execution.stopAddedInRoute alanını true olarak ayarlar. Navigation Connect API, sürücüyü orijinal hedefe doğru takip etmeye devam eder. Tahmini varış zamanı (TVZ), mesafe ve süre gibi metrikler, eklenen durakları içerecek şekilde artar.

Durak ekleme davranışı, navigasyon uygulamasına bağlıdır ve uygulamanın standart işlevselliğiyle eşleşir:

  • Google Haritalar: Sürücüler rotalarına birden fazla durak ekleyebilir.
  • Waze: Sürücüler yalnızca bir durak ekleyebilir. Bir sürücü başka bir durak eklemeye çalışırsa Waze, mevcut rotaya durağı eklemek yerine yeni bir navigasyon oturumu başlatmasını ister.

Bu özelliği desteklemek için arka uç girişlerinizi ayarlamanız gerekmez.

Kimlik doğrulama ve başlatma sorunlarını giderme

ENROUTE durumu almazsanız büyük olasılıkla bir kimlik doğrulama hatası oluşmuştur. Yaygın nedenler arasında yanlış yazılmış API parametreleri veya süresi dolmuş bir gezi jetonu yer alır. İlk CreateTrip yanıtınızdaki jeton geçerlilik bitiş zamanını kontrol edin.

Durum NEW'dan ENROUTE'ya değişmezse sürücünün cihazı kimlik doğrulamayı engelliyor olabilir. Navigation Connect bu durumlarda hata mesajı göndermez. Aşağıdakileri doğrulayın:

  • Sürücünün cihazında Waze 5.15.5 veya sonraki bir sürümü ya da Google Haritalar 26.14 veya sonraki bir sürümü yüklü olmalıdır.
  • Sürücü, Android Auto veya Apple CarPlay kullanmıyordur.
  • Sürücünün etkin bir internet bağlantısı olmalıdır.

Kalan rota verilerini işleme (yalnızca Waze)

Seyahat oluşturma sırasında kalan rota raporlamayı etkinleştirdiyseniz arka uçunuz, sürücünün mevcut konumundan nihai varış noktasına kadar olan etkin rota poliline ve anlık trafik koşullarına ilişkin bilgileri alır.

Bu verileri, uygulamalarınızdaki çeşitli özellikleri desteklemek için alıp işleyebilirsiniz. Örneğin:

  • Canlı izleme haritalarını destekleme: Sürücünün yolculuğu hakkında görünürlük sağlamak için kalan rota çoklu çizgisini müşteriye yönelik bir web veya mobil haritada oluşturun.
  • Tahmini varış zamanı doğruluğunu artırma: İç lojistiği veya teslimat varış tahminlerini iyileştirmek için yola göre hizalanmış çoklu çizgi ve trafik aralığı hızlarını birleştirin.
  • Yönlendirme uygunluğunu analiz etme: Sürücülerin kurallara uyup uymadığını değerlendirmek için kalan rota geometrisini beklenen dağıtım rotalarıyla karşılaştırın.

Navigation Connect, GetTrip isteği gönderip göndermediğinize veya Google Cloud Pub/Sub'ı kullanarak etkinliğe dayalı güncellemeler alıp almadığınıza bakılmaksızın kalan rota ayrıntılarını execution.remainingRoute alanında döndürür. Ancak, yük biçimlerinin bu verileri nasıl biçimlendireceği ve yapılandıracağı, kullandığınız alma yöntemine bağlıdır.

GetTrip yöntemi

GetTrip yöntemini çağırdığınızda, çoklu çizginin yanıt biçimi, isteğinizde belirttiğiniz routePolylineFormat parametresine bağlıdır. Daha fazla bilgi için Çoklu çizgi biçimlerini özelleştirme başlıklı makaleyi inceleyin.

Navigation Connect, tüm çoklu çizgi biçimleri için trafiği SpeedReadingInterval alanında ayrı bir execution.remainingRoute.trafficInformation nesne listesi olarak döndürür. Bu nesneler, aşağıdaki değerleri kullanarak trafik kategorilerini çoklu çizgi indeksleriyle eşler:

  • startPolylinePointIndex: Çoklu çizgi üzerindeki trafik aralığının başlangıç dizini.
  • endPolylinePointIndex: Trafik aralığının bitiş dizini.
  • speed: Bu segmentin trafik kategorisi: NORMAL, SLOW veya TRAFFIC_JAM.

Google Cloud Pub/Sub güncellemeleri

Pub/Sub ile seyahat verilerini aldığınızda, güncellemeler her zaman kalan rota verilerini execution.remainingRoute alanında birleştirilmiş bir GeoJSON FeatureCollection olarak döndürür.

Bu biçim, çoklu çizgi geometrisini doğrudan trafik hızlarıyla birleştirerek indekslerin manuel olarak eşlenmesi ihtiyacını ortadan kaldırır.

Pub/Sub yükü örneğini inceleyin.

Aşağıdaki kod örneğinde, bir Pub/Sub mesajının updatedTrip nesnesindeki execution.remainingRoute alanında döndürülen GeoJSON yapısı gösterilmektedir:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [-122.3934, 37.7955],
          [-122.4010, 37.7980]
        ]
      },
      "properties": {
        "speed": "SLOW"
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [-122.4010, 37.7980],
          [-122.4058, 37.8025],
          [-122.4187, 37.8021]
        ]
      },
      "properties": {
        "speed": "NORMAL"
      }
    }
  ]
}
    

Yük boyutunu optimize etme

Koordinat dizileri büyük olduğundan, kalan rota verilerini Pub/Sub mesajlarınıza eklemek yük boyutunu önemli ölçüde artırabilir (mesaj başına 13-14 KB'a kadar). Yüksek sıklıkta güncellemeler alırsanız bu hacim, arka uç işlem yükünü ve kullanım maliyetlerini artırabilir.

Akışınızı optimize etmek için gezi oluşturma sırasında pubsubFieldMask nesnenizde TripConfig parametresini kullanarak ağır alanları hariç tutun. Ayrıntılı bilgi için İsteğe bağlı yapılandırmalar başlıklı makaleye bakın.

Seyahat bitiş durumlarını işleme

Bir sürücü hedefe ulaştığında veya navigasyonu durdurduğunda, yük aşağıdaki son durumları döndürür. Uygulamanızda uygun sonraki adımları tetiklemek için bu durumları kullanın.

Durum Açıklama Önerilen işlem
ARRIVED Sürücü hedefe ulaştı. remainingDistanceMeters simgesini kontrol edin. Sürücü yakında bir yere park etmişse ancak tam koordinatlarda değilse uygulamanızda yürüme yol tarifi sağlamayı düşünebilirsiniz.
SUSPENDED Sürücü, varış noktasına ulaşmadan önce adım adım navigasyondan manuel olarak çıktı.
Google Haritalar veya Waze, sürücüleri bir oturumdan erken çıktıklarında uygulamanıza otomatik olarak geri yönlendirmediğinden sürücünün geri dön düğmesine manuel olarak dokunması gerekir.
Sürücülerin yolculuklarını tamamlamalarına yardımcı olmak için execution.location ile varış noktasını karşılaştırın. Mesafe kalırsa yolculuğa devam etmek veya yürüyüş moduna geçmek için bir düğme ya da bağlantı sağlayın.
FAILED Teknik bir hata nedeniyle bağlantı kesildi. Bu durum, uygulama bir rota hesaplayamadığında veya güvenlik uyarısı göründüğünde ortaya çıkar. Sürücü navigasyonu kullanmaya devam edebilir ancak siz güncelleme almazsınız. Uygulamanızda manuel durum izlemeye geri dönün.
CLIENT_ERROR Bu durumun nedenleri şunlardır:
  • Sürücü, izni iptal eder.
  • Sürücü, Android Auto veya Apple CarPlay gibi desteklenmeyen bir platform kullanıyordur.
  • Uygulamanız, farklı bir varış noktası olan bir gezi için gezi jetonunu yeniden kullanıyor.
  • Sürücü, gezi sırasında herhangi bir noktada ABD'de bulunuyor ancak kurulum sırasında uygulamanızı doğruladığınızda uygulamanızda ABD'de veri paylaşımı etkin değil.
Uygulamanızda manuel durum izlemeye geri dönün.