Rute lungi și multe puncte

Multe sisteme TMS și de planificare calculează singure ruta (de ex. cu Azure Maps, Google sau TomTom) și apoi au nevoie doar de taxa pentru exact acea rută. În acest scop, coordonatele planificate se transmit ca puncte către API-ul TollCalc.

Transmiterea punctelor

POST /api/calculate acceptă origin, destination și opțional via (puncte intermediare). Fiecare punct este o adresă sau o coordonată în formatul "lat;lon".

curl -X POST https://app.tollcalc.eu/api/calculate \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "origin": "48.1374;11.5755",
    "destination": "52.5200;13.4050",
    "via": ["49.0134;12.1016", "50.1109;8.6821"],
    "vehicle": { "weight": 40, "axles": 5, "emission_class": "euro6", "co2_class": "class_1" }
  }'

Limite și downsampling pe server

Motorul de rutare procesează un număr limitat de puncte per cerere (momentan 50 în total, adică start + destinație + 48 via). TollCalc gestionează asta inteligent:

  • Adrese (care trebuie mai întâi geocodificate): maximum 48 via. Mai multe adrese → HTTP 400.
  • Coordonate ("lat;lon"): poți trimite mai multe. TollCalc reduce lanțul pe server până la limită (downsampling). Startul și destinația sunt întotdeauna păstrate, iar forma rutei este prioritizată printr-o preselecție Douglas-Peucker. Niciun tronson nu este tăiat.

Important: Downsamplingul se aplică doar dacă toate punctele sunt coordonate ("lat;lon"). Imediat ce apare o adresă, se aplică în continuare limita de 48 via.

Verificarea abaterii (asigurarea calității)

Deoarece un lanț redus poate teoretic distorsiona ruta, TollCalc verifică automat calitatea: ruta calculată este comparată cu punctele tale originale, iar abaterea maximă este evaluată raportat la lungimea rutei.

  • ≤ 2 % → răspuns normal; abaterea se află în câmpul geometry_deviation_km.
  • > 2 % → HTTP 400 cu error și un warning explicativ.

Exemplu de cerere respinsă:

{
  "error": "Downsampling-Abweichung zu groß",
  "warning": "Die aus den Stützpunkten berechnete Route weicht zu stark von der Eingabe ab: max. 67.87 km bzw. 2.14 % der Strecke (erlaubt 2 %). Bitte dichtere oder mehr Koordinaten im Format \"lat;lon\" senden."
}

(Mesajul API este momentan în germană.)

La un downsampling reușit, răspunsul conține în plus:

Câmp Semnificație
route_source "downsampled" (absent dacă nu a fost necesară reducerea)
waypoints_submitted numărul de puncte trimise
waypoints_used numărul de puncte efectiv rutate
geometry_deviation_km abaterea maximă a punctelor tale față de ruta calculată

De ce rutare cu puncte în loc de map matching?

O polilinie trimisă ar putea fi aliniată la rețeaua rutieră prin map matching, în loc să rutăm noi înșine. TollCalc nu face asta în mod deliberat – dintr-un motiv simplu: taxa depinde exact de ruta parcursă.

Taxa variază în funcție de tronsonul concret de autostradă, operator, tuneluri și taxe speciale, sistem (deschis/închis) și țară. O altă ieșire sau un drum paralel produce deja o taxă greșită. Ruta trebuie deci să fie 100 % corectă – nu „aproximativă".

Rezultatul map matchingului depinde însă puternic de calitatea datelor de intrare:

  • zgomot GPS, rata de eșantionare și proiecția punctelor trimise,
  • goluri cauzate de tuneluri, feriboturi sau pierderea semnalului,
  • polilinii „simplificate" sau netezite din sisteme terțe.

Din exterior nu putem ști dacă geometria trimisă este într-adevăr ruta parcursă sau o versiune simplificată/distorsionată. Conform principiului garbage in, garbage out, am indica o taxă pentru o rută pe care clientul nu a parcurs-o niciodată – fără ca acest lucru să se observe.

De aceea abordarea deliberată:

  • Punctele trimise sunt puncte obligatorii, nu simple „sugestii". Motorul creează din ele o rută garantat circulabilă care trece prin fiecare punct în ordinea corectă.
  • Rezultatul este reproductibil, iar abaterea față de punctele tale originale este măsurabilă și este indicată.
  • Asigurarea calității (downsampling + verificarea abaterii) o facem noi – nu clientul. Clientul nu trebuie să livreze o rută 100 % corectă și nici să ruleze map matching: transmite ruta planificată, iar noi ne ocupăm de ruta corectă, utilizabilă pentru taxare.

Compromisul este deliberat: preferăm o respingere transparentă (HTTP 400 cu motiv) atunci când punctele trimise nu dau o rută neechivocă, în locul unei taxe tăcut greșite. Când map matchingul nostru se va dovedi solid, îl vom reevalua – până atunci, rutarea cu puncte rămâne alegerea fiabilă.

Când devine dificil

Downsamplingul funcționează foarte fiabil pentru cursele normale de lungă distanță. Devine mai dificil la:

  • Curse foarte lungi, de mai multe zile – cu cât ruta e mai lungă, cu atât distanța dintre puncte după downsampling e mai mare.
  • Curse de distribuție cu multe opriri mici și bucle.
  • Tronsoane cu feribot sau încărcare (goluri mari în traseul GPS): ruta rutieră se poate abate considerabil.
  • Valori aberante GPS (fix slab, tunel): un singur punct imprecis poate ridica abaterea.
  • Rute deliberat fără taxă: dacă motorul merge pe alt drum, se schimbă și taxa.

Bune practici pentru integrările TMS

  1. O cursă per cerere – nu trimite istoricul pozițiilor pe mai multe zile.
  2. Coordonate în loc de adrese când ai multe puncte.
  3. Eșantionare suficient de densă – circa 1 punct pe kilometru este suficient.
  4. Curăță GPS-ul: elimină fixurile imprecise (gpsFix=false, accuracy mare).
  5. Tronsoanele cu feribot/încărcare ca cereri separate.
  6. Loghează/monitorizează geometry_deviation_km pentru a urmări calitatea datelor.

Evaluare onestă

TollCalc calculează taxa pentru ruta pe care o parcurge motorul de rutare. La lanțuri dense de coordonate, potrivirea este foarte mare (în practică, de obicei sub 1 %), dar – spre deosebire de map matching – nu este o garanție 1:1. Verificarea abaterii face această incertitudine transparentă.

→ Calculează taxa acum