Długie trasy i wiele punktów
Wiele systemów TMS i planowania samo oblicza trasę (np. w Azure Maps, Google lub TomTom), a następnie potrzebuje już tylko myta dla dokładnie tej trasy. W tym celu zaplanowane współrzędne przekazuje się jako punkty do API TollCalc.
Przekazywanie punktów
POST /api/calculate przyjmuje origin, destination oraz opcjonalnie via (punkty pośrednie). Każdy punkt to adres albo współrzędna w formacie "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" }
}'
Limity i downsampling po stronie serwera
Silnik routingu przetwarza ograniczoną liczbę punktów na żądanie (obecnie 50 łącznie, czyli start + cel + 48 via). TollCalc radzi sobie z tym inteligentnie:
- Adresy (które najpierw trzeba geokodować): maksymalnie 48
via. Więcej adresów → HTTP 400. - Współrzędne (
"lat;lon"): możesz przekazać więcej. TollCalc redukuje łańcuch po stronie serwera do limitu (downsampling). Start i cel są zawsze zachowywane, a kształt trasy jest priorytetyzowany przez wstępny wybór metodą Douglasa-Peuckera. Żaden odcinek nie jest odcinany.
Ważne: Downsampling działa tylko wtedy, gdy wszystkie punkty są współrzędnymi (
"lat;lon"). Gdy pojawi się adres, nadal obowiązuje limit 48via.
Kontrola odchylenia (zapewnienie jakości)
Ponieważ zredukowany łańcuch może teoretycznie zniekształcić trasę, TollCalc automatycznie sprawdza jakość: obliczona trasa jest porównywana z Twoimi oryginalnymi punktami, a maksymalne odchylenie oceniane względem długości trasy.
- ≤ 2 % → normalna odpowiedź; odchylenie jest w polu
geometry_deviation_km. - > 2 % → HTTP 400 z
errori wyjaśniającymwarning.
Przykład odrzuconego żądania:
{
"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."
}
(Komunikat API jest obecnie po niemiecku.)
Przy udanym downsamplingu odpowiedź zawiera dodatkowo:
| Pole | Znaczenie |
|---|---|
route_source |
"downsampled" (brak, jeśli redukcja nie była potrzebna) |
waypoints_submitted |
liczba przesłanych punktów |
waypoints_used |
liczba faktycznie wyznaczonych punktów trasy |
geometry_deviation_km |
maksymalne odchylenie Twoich punktów od wyznaczonej trasy |
Dlaczego routing z punktami, a nie map matching?
Przekazany polilinię można by dopasować do sieci drogowej za pomocą map matchingu, zamiast samemu wyznaczać trasę. TollCalc celowo tego nie robi – z prostego powodu: myto zależy dokładnie od przejechanej trasy.
Myto różni się w zależności od konkretnego odcinka autostrady, operatora, tuneli i opłat specjalnych, systemu (otwarty/zamknięty) oraz kraju. Inny zjazd lub równoległa droga daje już błędne myto. Trasa musi więc być w 100 % poprawna – nie „w przybliżeniu".
Wynik map matchingu zależy jednak silnie od jakości danych wejściowych:
- szum GPS, częstotliwość próbkowania i projekcja przekazanych punktów,
- luki spowodowane tunelami, promami lub utratą sygnału,
- „uproszczone" lub wygładzone polilinie z systemów zewnętrznych.
Z zewnątrz nie możemy stwierdzić, czy przekazana geometria to rzeczywiście przejechana trasa, czy jej uproszczona/zniekształcona wersja. Zgodnie z zasadą garbage in, garbage out podalibyśmy myto dla trasy, której klient nigdy nie przejechał – niezauważenie.
Dlatego świadome podejście:
- Przekazane punkty są punktami obowiązkowymi, a nie „sugestiami". Silnik tworzy z nich gwarantowanie przejezdną trasę, która przechodzi przez każdy punkt we właściwej kolejności.
- Wynik jest powtarzalny, a odchylenie od Twoich oryginalnych punktów jest mierzalne i podawane.
- Zapewnienie jakości (downsampling + kontrola odchylenia) bierzemy na siebie my – nie klient. Klient nie musi dostarczać trasy w 100 % ani uruchamiać map matchingu: przekazuje zaplanowaną trasę, a my dbamy o poprawną trasę nadającą się do naliczenia myta.
Kompromis jest świadomy: wolimy przejrzyste odrzucenie (HTTP 400 z uzasadnieniem), gdy przekazane punkty nie dają jednoznacznej trasy, niż po cichu błędne myto. Gdy nasz map matching okaże się niezawodny, wrócimy do tematu – do tego czasu routing z punktami pozostaje niezawodnym wyborem.
Kiedy staje się to trudne
Downsampling działa bardzo niezawodnie w normalnych trasach długodystansowych. Trudniej jest przy:
- Bardzo długich, wielodniowych trasach – im dłuższa trasa, tym większy odstęp między punktami po downsamplingu.
- Trasach dystrybucyjnych z wieloma małymi przystankami i pętlami.
- Odcinkach promowych lub załadunkowych (duże luki w śladzie GPS): trasa drogowa może wtedy znacznie się różnić.
- Odstających wartościach GPS (słaby fix, tunel): jeden niedokładny punkt może podnieść odchylenie.
- Celowo bezpłatnych trasach: jeśli silnik pojedzie inną drogą, myto też się zmieni.
Dobre praktyki dla integracji TMS
- Jedna trasa na żądanie – nie wysyłaj historii pozycji z kilku dni.
- Współrzędne zamiast adresów, gdy masz wiele punktów.
- Wystarczająco gęste próbkowanie – około 1 punkt na kilometr wystarczy.
- Oczyść GPS: usuń niedokładne fixy (
gpsFix=false, wysokieaccuracy). - Odcinki promowe/załadunkowe jako osobne żądania.
- Loguj/monitoruj
geometry_deviation_km, aby pilnować jakości danych.
Uczciwa ocena
TollCalc oblicza myto dla trasy, którą przejechał silnik routingu. Przy gęstych łańcuchach współrzędnych zgodność jest bardzo wysoka (w praktyce zwykle poniżej 1 %), ale – inaczej niż przy map matchingu – nie jest gwarancją 1:1. Kontrola odchylenia czyni tę niepewność przejrzystą.