⚡ Gerçek zamanlı nowcast
Sürücünün bulunduğu segment her zaman canlı radar kaynaklı yıldırım, fırtına ve yağış verisi taşır — model tahmini değil.
🔭 İleriye dönük tahmin
İlerleyen segmentler saatler önceden koşulları planlamak için saatlik NWP tahmin verisiyle zenginleştirilir.
🗺️ Akıllı segmentasyon
Rota, Uber H3 altıgen hücrelerine bölünür. Her hücre kendi ETA’sını ve bağımsız hava sorgusunu alır; böylece veri her zaman taze ve konumsal olarak doğru kalır.
Enroute API nedir?
Enroute API, planlanmış bir rotayı canlı hava takip oturumuna dönüştürür. Rota geometrisini, kalkış saatini ve süresini sağlarsınız — API rotayı coğrafi segmentlere böler, her birine zamanlanmış varış saati ekler ve sonraki her sorguda tüm segmentler için hava verisi döndürür. Tüm yaşam döngüsünü iki uç nokta yönetir:| Uç Nokta | Amaç |
|---|---|
POST /v1/enroute/register | Rota oturumu oluşturur. routeId ve ilk hava durumu görünümünü döndürür. |
POST /v1/enroute/weather | Sürücünün mevcut konumuyla aktif oturumu sorgular. Güncel hava durumu, konum durumu ve varsa zamanlama değişikliklerini döndürür. |
İsteklerdeki ve yanıtlardaki tüm zaman damgaları epoch milisaniyedir (64-bit tam sayı). Asla ISO string veya ondalık saniye göndermeyiniz.
Segmentasyon nasıl çalışır?
Bir rota kaydedildiğinde servis, rota geometrisini (kodlanmış polyline veya koordinat listesi) çözümler ve her noktayı çözünürlük 5’teki Uber H3 altıgen hücresine eşler. Aynı hücreye düşen ardışık noktalar birleştirilir; böylece sıralı benzersiz hücreler listesi — segmentler — elde edilir. Her segment şunları alır:eta— zamanlanmış varış anı:kalkışZamanı + (girişMesafesi / toplamMesafe) × süreSniyeşeklinde enterpolasyonla hesaplanıretd— zamanlanmış ayrılış anı (aynı enterpolasyon,çıkışMesafesikullanılarak)distanceToEntry/distanceToExit— rota başından kümülatif metre değerleriarrivalPoint/departurePoint— rotanın hücreye girdiği ve çıktığı coğrafi koordinatlarh3Address— H3 hücre tanımlayıcısı (hava sorguları için kullanılır)
Nowcast ve Forecast
Yanıt, segmentin zaman ufkuna bağlı olarak iki yapısal olarak farklı hava yükü içerir.currentSegment — Nowcast + Forecast
Sürücünün şu anda bulunduğu segment (veya kayıt anında ilk segment) nowcast verisi alır: canlı radar ve sensör ağlarından türetilen gerçek zamanlı gözlemler. Bu, mevcut en zengin ve en doğru hava durumu görüntüsüdür.
Nowcast, üç özel özet nesne içerir:
| Nesne | Kaynak | Ne söyler |
|---|---|---|
lightningSummary | Yıldırım tespit sensörleri | Flaş sayıları, tepe akımı, risk endeksi, yaklaşım trendi |
thunderstormSummary | Radar fırtına takip hücreleri | Aktif fırtına listesi, tehdit sınırı yakınlığı, yön, şiddet |
precipitationSummary | Radar reflektivitesi | Mevcut yoğunluk, trend, beklenen başlangıç/bitiş, tahmin maksimumu |
- Yıldırım: Sensör ağları yalnızca gerçekleşmiş flaşları kaydeder. Geleceğe dönük herhangi bir çıktı üretmez; sürücünün 2 saat sonra geçeceği hücre için yıldırım nowcast’i fiziksel olarak mümkün değildir.
- Fırtına: Radar tabanlı hücre takibi, aktif fırtına hücrelerinin anlık konumunu, hızını ve yönünü izler. Yalnızca mevcut gözleme dayanır; ileriye dönük projeksiyon üretmez. Saatler sonraki bir segment için anlamlı bir tehdit değerlendirmesi yapılamaz.
- Yağış: Radar gözlemleriyle birlikte çok kısa vadeli bir NWP projeksiyonu da mevcut olabilir; bu projeksiyon
precipitationSummaryiçindekiexpectedStartSec/expectedEndSecalanlarını besler. Ancak bu ufuk yalnızca anlık gözlem penceresini biraz aşar ve saatler sonraki bir segmentin koşullarını temsil etmez.
upcomingSegments — Yalnızca Forecast
Mevcut segmentten sonraki tüm segmentler NWP (Sayısal Hava Tahmini) saatlik tahmin verisi taşır: sıcaklık, hissedilen sıcaklık, nem, bulut örtüsü, rüzgar hızı/rüzgar hamlesi/yönü, yağış, yağış olasılığı, kar yağışı ve görüş mesafesi.
Kayıt anında,
departureTime şimdiden 60 dakika içindeyse mevcut segment için de nowcast verisi alınır. Kalkış daha uzak bir geleceğe aitse, ilk segment için de yalnızca tahmin verisi döndürülür.Rota kaydı
İstek
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
origin | GeoPoint | ✅ | Başlangıç koordinatı { lat, lng } |
destination | GeoPoint | ✅ | Bitiş koordinatı { lat, lng } |
departureTime | sayı | ✅ | Planlanan kalkış zamanı (epoch milisaniye) |
distanceMeters | sayı | ✅ | Toplam rota uzunluğu (metre) |
durationSeconds | sayı | ✅ | Tahmini seyahat süresi (saniye) |
geometry.encodedPolyline | string | ✅ (veya coordinates) | Google kodlamalı polyline |
geometry.polylinePrecision | sayı | — | Hassasiyet katsayısı (5 = standart, 6 = yüksek hassasiyet) |
geometry.coordinates | GeoPoint[] | ✅ (veya polyline) | Polyline yerine açık koordinat listesi |
waypoints | GeoPoint[] | — | Opsiyonel ara durak noktaları (bilgi amaçlı) |
Yanıt
Rota hava durumu sorgulama
İstek
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
routeId | UUID string | ✅ | /register’dan dönen oturum tanımlayıcısı |
currentLocation | GeoPoint | ✅ | Sürücünün anlık GPS koordinatı |
Yanıt
GetRouteWeatherResponse, RouteRegistrationResponse’ı genişletir ve şunları ekler:
| Alan | Tür | Açıklama |
|---|---|---|
segmentsRecalculated | boolean | Zamanlama dışı kalma nedeniyle segmentler yeniden hesaplandıysa true |
warning | string | Yeniden hesaplamanın neden gerçekleştiğini açıklayan kullanıcı dostu mesaj |
routeId, expirationTime, distanceUnit, status, currentSegment, upcomingSegments) yapı olarak kayıt yanıtıyla aynıdır.
Yanıt alanı referansı
LocationStatus
| Alan | Tür | Açıklama |
|---|---|---|
progressPercentage | sayı | Yolculuk tamamlanma yüzdesi (0–100) |
distanceTraveled | sayı | Rota başından itibaren gidilen mesafe (metre) |
remainingDistance | sayı | Varış noktasına kalan mesafe (metre) |
timeElapsedSeconds | sayı | departureTime’dan bu yana geçen saniye |
estimatedTimeRemainingSeconds | sayı | Mevcut hıza göre tahmini kalan seyahat süresi |
scheduleDeviationSeconds | sayı | Pozitif = zamanın önünde; negatif = zamanın gerisinde |
expectedSegmentIndex | sayı | Orijinal zaman çizelgesine göre sürücünün bulunması gereken segment indeksi |
estimatedArrivalTime | sayı | Tahmini varış zamanı (epoch milisaniye), expirationTime ile sınırlandırılmış |
expectedSegmentIndex rota zamanlamasını yansıtır, GPS konumunu değil. Sürücü segment 2’deyken zamanlama segment 3’te olmasını bekliyorsa bu alan 3 gösterir. Zamanlama kaymasını tespit etmek için currentSegment.index ile karşılaştırın.BaseRouteSegment (currentSegment ve upcomingSegments için ortak)
| Alan | Tür | Açıklama |
|---|---|---|
index | sayı | Rotadaki sıfır tabanlı segment konumu |
h3Address | string | Çözünürlük 5’teki Uber H3 hücre tanımlayıcısı |
eta | sayı | Zamanlanmış varış (epoch milisaniye) |
etd | sayı | Zamanlanmış ayrılış (epoch milisaniye) |
distanceToEntry | sayı | Rota başından hücre girişine kümülatif mesafe (metre) |
distanceToExit | sayı | Rota başından hücre çıkışına kümülatif mesafe (metre) |
arrivalPoint | GeoPoint | Rotanın hücreye girdiği koordinat |
departurePoint | GeoPoint | Rotanın hücreden çıktığı koordinat |
ForecastWeatherEvents (tüm segmentler)
| Alan | Tür | Birim | Açıklama |
|---|---|---|---|
temperature | sayı | °C | 2 m yükseklikte hava sıcaklığı |
apparentTemperature | sayı | °C | Hissedilen sıcaklık |
humidity | sayı | % | Bağıl nem |
cloudCover | sayı | % | Gökyüzü bulut oranı |
windSpeed | sayı | km/s | 10 m yükseklikte rüzgar hızı |
windGust | sayı | km/s | Maksimum rüzgar hamlesi |
windDirection | sayı | ° | Meteorolojik rüzgar yönü (0 = Kuzey, 90 = Doğu) |
snowFall | sayı | cm | Kar yağışı birikimi |
precipitation | sayı | mm | Yağış miktarı |
precipitationProbability | sayı | % | Model yağış olasılığı |
visibility | sayı | m | Yatay görüş mesafesi |
Nowcast özet alanları
currentSegment.weatherEvents nesnesi, nowcast verisi mevcut olduğunda üç ek özet nesne içerir.
LightningSummary — Yıldırım Özeti
Yer tabanlı elektromanyetik sensörlerden türetilen gerçek zamanlı yıldırım aktivitesi.
| Alan | Tür | Açıklama |
|---|---|---|
windowMinutes | sayı | Toplam gözlem penceresi (örn. 60 dakika) |
bucketMinutes | sayı | Toplama için kullanılan zaman dilimi çözünürlüğü (örn. 30 dakika) |
totalEventCount | sayı | Pencere içinde tüm çakım olayları (bulut içi şimşek + yerden buluta yıldırım) |
cgFlashCount | sayı | Yıldırım sayısı — açıkta çalışanlar ve sürücüler için en tehlikeli tür |
icPulseCount | sayı | Şimşek sayısı — fırtına elektriklenme yoğunluğunun göstergesi |
lastEventAgeSec | sayı | Herhangi bir türdeki en son olaydan bu yana geçen saniye |
lastFlashAgeSec | sayı | En son yıldırımdan bu yana geçen saniye |
lastPulseAgeSec | sayı | En son şimşekten bu yana geçen saniye |
nearestEventDistance | sayı | Herhangi bir türdeki en yakın olaya metre cinsinden mesafe |
nearestFlashDistance | sayı | En yakın yıldırıma metre cinsinden mesafe |
nearestPulseDistance | sayı | En yakın şimşeğe metre cinsinden mesafe |
maxPeakCurrent | sayı | Penceredeki maksimum tepe akımı (kA) — yüksek değerler daha yıkıcı flaşlara işaret eder |
avgPeakCurrent | sayı | Ortalama tepe akımı (kA) |
avgSensorCount | sayı | Her olayı tespit eden ortalama sensör sayısı — yüksek = daha doğru konum |
confidenceScore | sayı | 0–1 arası tespit kalitesi güven skoru |
confidenceLevel | enum | LOW / MEDIUM / HIGH |
riskIndex | sayı | Bileşik risk skoru (0–100) |
riskLevel | enum | NONE / LOW / MEDIUM / HIGH / EXTREME |
trend | enum | UNKNOWN / DECREASING / STABLE / INCREASING |
riskLevel rengine göre bir yıldırım kalkan simgesi gösterin. riskLevel HIGH veya EXTREME ise acil uyarı çıkarın. nearestFlashDistance ve lastFlashAgeSec ile bağlam sağlayın: “45 saniye önce 3,2 km uzakta yıldırım tespit edildi — araçta kalın.”
ThunderstormSummary — Fırtına Özeti
Çok katmanlı radar analizinden türetilen fırtına hücresi takibi.
summary nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
stormCount | sayı | Gözlem penceresindeki toplam takip edilen fırtına hücresi sayısı |
activeStorms | sayı | Şu anda yıldırım veya şiddetli yağış üreten hücre sayısı |
insideAnyThreatBoundary | boolean | Sürücünün H3 hücresi herhangi bir fırtınanın tehdit poligonuyla kesişiyorsa true |
nearestThreatBoundaryDistance | sayı | En yakın fırtına tehdit sınırına metre cinsinden mesafe |
nearestStormCentroidDistance | sayı | En yakın fırtına hücresi merkezine metre cinsinden mesafe |
maxSeverity | enum | Tüm takip edilen fırtınalar arasındaki en yüksek şiddet: LOW / NORMAL / HIGH / UNKNOWN |
lastEventAge | sayı | En son fırtına olayından bu yana geçen saniye |
riskScore | sayı | Bileşik risk skoru (0–100) |
riskLevel | enum | NONE / LOW / MEDIUM / HIGH / EXTREME / UNKNOWN |
trend | enum | RISING / STABLE / FALLING / UNKNOWN |
activeStorms[] — fırtına başına detay
| Alan | Tür | Açıklama |
|---|---|---|
eventId | string | Takip edilen fırtına hücresinin benzersiz tanımlayıcısı |
severity | enum | LOW / NORMAL / HIGH / UNKNOWN |
eventStartUtcEpoch | sayı | Fırtına hücresinin ilk tespit edildiği zaman (epoch milisaniye) |
eventEndUtcEpoch | sayı | Son kaydedilen aktivite zamanı (epoch milisaniye) |
eventAge | sayı | Fırtına hücresinin ilk tespitinden bu yana geçen saniye |
cell.area | sayı | Fırtına hücresi alanı (km²) |
cell.speed | sayı | Fırtına hareket hızı (km/s) |
cell.direction | sayı | Fırtına hareket yönü (derece, meteorolojik) |
cell.centroidDistance | sayı | Sürücüden fırtına hücresi merkezine mesafe (metre) |
cell.directionFromDriver | enum | Pusula yönü: N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW |
cell.bearingFromDriver | sayı | Sürücüden fırtına merkezine tam açı (derece) |
flashRates.inCloud | sayı | Şimşek hızı (adet/dakika) |
flashRates.cloudToGround | sayı | Yıldırım hızı (adet/dakika) |
flashRates.total | sayı | Toplam çakım hızı (adet/dakika) |
flashRates.cloudToGroundRatio | sayı | Yıldırım oranı (0–1); yüksek = daha fazla yıldırım |
threat.insideThreatPolygon | boolean | Sürücü bu fırtınanın tehdit poligonu içindeyse true |
threat.distanceToThreatBoundary | sayı | Bu fırtınanın tehdit poligonu sınırına metre cinsinden mesafe |
threat.directionFromDriver | enum | Tehdit sınırına pusula yönü |
threat.bearingFromDriver | sayı | Tehdit sınırına tam açı |
threat.approachState | enum | APPROACHING / MOVING_AWAY / STABLE / UNKNOWN |
score.stormRiskScore | sayı | Fırtına başına risk skoru (0–100) |
score.stormRiskLevel | enum | NONE / LOW / MEDIUM / HIGH / EXTREME / UNKNOWN |
insideAnyThreatBoundary true ise bu anlık bir güvenlik uyarısıdır — sürücü bir fırtınanın tahmin edilen etki bölgesi içindedir. approachState: APPROACHING bayrağı ve nearestThreatBoundaryDistance sürücünün durması mı yoksa devam etmesi mi gerektiğine karar vermesine yardımcı olur. Fırtınanın hangi yönden geldiğini anlamak için directionFromDriver değerini gösterin.
PrecipitationSummary — Yağış Özeti
Mevcut H3 hücresi için radar kaynaklı yağış analizi.
| Alan | Tür | Açıklama |
|---|---|---|
windowMinutes | sayı | Gözlem penceresi (dakika) |
bucketMinutes | sayı | Toplama dilimi (dakika) |
currentIntensity | enum | Mevcut yoğunluk: DRIZZLE / LIGHT / MODERATE / HEAVY / VERY_HEAVY / EXTREME, yağış yoksa null |
isPrecipitating | boolean | Hücre üzerinde yağış tespit ediliyorsa true |
radarTimeStamp | sayı | Kullanılan radar taramasının epoch milisaniyesi |
dataAgeSec | sayı | Radar verisinin yaşı (saniye) — 600 saniyenin altı taze kabul edilir |
radarSnapshotCount | sayı | Pencereye dahil edilen radar taraması sayısı |
maxIntensity | enum | Pencerede kaydedilen maksimum yoğunluk |
trend | enum | INCREASING / STABLE / DECREASING / UNKNOWN |
riskLevel | enum | NONE / LOW / MEDIUM / HIGH / EXTREME |
forecastMaxIntensity | enum | NWP modelinin yakın gelecek için tahmin ettiği maksimum yoğunluk |
expectedEndSec | sayı | Yağışın bitmesi için beklenen süre (saniye) — şu anda yağıyorsa |
expectedStartSec | sayı | Yağışın başlaması için beklenen süre (saniye) — şu anda kuru ise |
currentIntensity’yi hava rozeti olarak gösterin. expectedStartSec’i önceden uyarı vermek için kullanın — “8 dakika içinde şiddetli yağmur bekleniyor” — böylece sürücüler hazırlık yapabilir (silecekler, hız düşürme). HEAVY veya üzeri proaktif bir anlık bildirim gerektirir.
Rota dışı ve zamanlama dışı durumlar
Rota Dışı (Off-Route)
/weather uç noktası, sürücünün currentLocation konumunun kayıtlı rotanın herhangi bir segmentine 1.000 metre içinde olup olmadığını kontrol eder (dik mesafe).
Sürücü bu eşiği aşarsa:
- Rota oturumu önbellekten anında silinir.
error: "Off Route"ile 400 Bad Request döner.routeIdartık geçerli değildir.- İstemci
/register’ı yeni bir rota ile tekrar çağırmalıdır.
error: "Off Route" kombinasyonunu dinleyin. Kullanıcıya bir iletişim kutusu gösterin: “Rotadan çıktınız. Hava durumu takibini sürdürmek için yeni güzergahınızda navigasyonu başlatın.” Aynı routeId ile /weather’ı yeniden denemeyin.
Zamanlama Dışı (Off-Schedule)
Sürücünün GPS konumu beklenenden önemli ölçüde geride kalıyorsa — özelliklenow, sürücünün mevcut segmentinden sonraki segmentin zamanlanmış ETA’sından 10 dakikadan fazla geçtiyse — servis kalan rota segmentlerini sürücünün mevcut konumundan sessizce yeniden hesaplar.
Yeniden hesaplama gerçekleştiğinde:
- Yanıtta
segmentsRecalculated: trueayarlanır. warning, kullanıcı dostu bir açıklama içerir.- Segment indeksleri, ETA’lar ve mesafeler sürücünün mevcut konumundan sıfırlanır.
currentSegment, sürücünün şu anda bulunduğu konumdan başlayan yeni segment 0’ı yansıtır.expirationTime, yeni ETA + 2 saat olarak uzatılır.
Hata referansı
| HTTP Durum | error | Tetikleyici |
|---|---|---|
| 400 | Off Route | Sürücü rotadan 1.000 m’den fazla uzaklaştı. Oturum silindi. |
| 400 | Invalid Route | routeId bulunamadı, oturum süresi doldu veya rota geometrisi geçersiz. |
| 409 | Duplicate Route | Aynı başlangıç → varış çifti için zaten aktif bir oturum var. Mevcut routeId’yi kullanın. |
| 402 | Payment Required | Abonelik süresi doldu veya tükendi. |
| 403 | Forbidden | Bu uç nokta için abonelik yok veya sorgu konumu abonelik sınırları dışında. |
| 429 | Too Many Requests | Abonelik istek limiti aşıldı. |
| 500 | Data Provider Error | Bir hava durumu veri sağlayıcısına ulaşılamadı. Yanıt, hangi kaynak (Nowcast / Tahmin) ve servisin (Yıldırım, Gök Gürültülü Fırtına, Yağış, Anlık Tahmin, Saatlik Tahmin) başarısız olduğunu içerir. |
Yinelenen Rota (409)
Süresi Dolmuş veya Bulunamadı (400)
Veri Tedarik Hatası (500)
Altta yatan hava durumu servislerinden (yıldırım, gök gürültülü fırtına, yağış veya tahmin) birine ulaşılamadığında döner.message alanı hangi kaynak ve servisin başarısız olduğunu belirtir; loglama ve kullanıcı dostu geri dönüş mesajı gösterimi için kullanabilirsiniz.
- Nowcast hatası
- Tahmin hatası
Geliştirici notları
Tüm zaman damgaları epoch milisaniyedir
Tüm zaman damgaları epoch milisaniyedir
API’deki tüm
Instant tipli alanlar 64-bit tam sayı epoch milisaniye olarak serileştirilir — expirationTime, eta, etd, estimatedArrivalTime. Bu değerleri asla saniye olarak yorumlamayın. JavaScript’te doğrudan new Date(value), Java’da Instant.ofEpochMilli(value) kullanın.Başlangıç–varış çifti başına bir aktif oturum
Başlangıç–varış çifti başına bir aktif oturum
API
(kullanıcıId, başlangıçH3, varışH3) üzerinde tekilleştirme uygular. Sürücü aktif bir oturum varken aynı rotayı kaydetmeye çalışırsa 409 Conflict döner; messages dizisinde mevcut routeId ve expirationTime bulunur. 409’u fatal hata olarak ele almak yerine messages dizisini ayrıştırarak mevcut routeId’yi çıkarın ve sorgulamaya devam edin.Oturum sona erme
Oturum sona erme
Oturumlar ETA + 2 saat sonra sona erer. Süresi dolduktan sonra eski
routeId ile /weather çağrısı 400 döndürür. Sona erme süresini proaktif olarak takip etmek için her yanıttaki expirationTime ile karşılaştırma yapın.Yoklama sıklığı
Yoklama sıklığı
Sunucu tarafı push yoktur; tüm güncellemeler istemci tarafından başlatılan
/weather sorgusu gerektirir. Araç hareket halindeyken önerilen yoklama aralığı: her 30–60 saniyede bir. Araç durakken (örn. trafik durması) 5 dakikaya düşürülebilir.segmentsRecalculated işleme
segmentsRecalculated işleme
segmentsRecalculated: true olduğunda segment listesi sürücünün mevcut konumundan yeniden oluşturulmuştur. Segment index değerleri 0’dan yeniden başlar. Önceki segment indekslerini önbelleğe alan UI öğelerinin (ilerleme çubukları, segment listesi kaydırma) yeni yanıt kullanılarak yeniden başlatılması gerekir.distanceUnit her zaman metredir
distanceUnit her zaman metredir
Yanıttaki
distanceUnit alanı her zaman "m" değerini alır. distanceToEntry, distanceToExit ve remainingDistance değerlerinin tümü metredir. Km veya mil’e dönüşümü UI katmanında yapın.Postman ile test
Aşağıdaki Postman görselleştirme scripti, her/register veya /weather isteğinden sonra Visualize sekmesinde okunabilir bir rota özeti render eder — rota durumunu anlamak için ham JSON okumaya gerek kalmaz.
Kullanımı:
- İsteği Postman’de açın (
POST /v1/enroute/registerveyaPOST /v1/enroute/weather). - Scripts → Post-response bölümüne gidin ve aşağıdaki scripti yapıştırın.
- İsteği gönderin, ardından Visualize sekmesine geçin.