API optymalizacji tras (REST + SOAP) – przewodnik deweloperski

TrackRoad oferuje API do optymalizacji tras i dispatchingu, które pozwalają deweloperom integrować routing wieloprzystankowy, dispatching wielopojazdowy, okna czasowe i ograniczenia pojemności we własnych systemach.

Ta strona to praktyczny przegląd i szybki start. Pełne szczegóły endpointów oraz przykłady w różnych językach znajdziesz w dokumentacji API oraz na dedykowanych stronach dotyczących uwierzytelniania i Dispatch .

Przewodnik deweloperski po API optymalizacji tras TrackRoad pokazujący żądania Dispatch, routing wieloprzystankowy i okna czasowe
API optymalizacji tras (REST + SOAP): Dispatch, routing wielopojazdowy, okna czasowe i ograniczenia.

Rozpocznij integrację z API optymalizacji tras

Uwierzytelnij się swoim TrackServiceKey: REST używa X-API-Key, a SOAP używa SessionIDHeader.SessionID. Następnie zbuduj żądanie Dispatch i uruchom optymalizację.

Otwórz dokumentację Swagger API Referencja API Dispatch

Spis treści

  1. Co możesz zbudować
  2. REST vs SOAP
  3. Uwierzytelnianie (TrackServiceKey)
  4. API Dispatch (główne wywołanie optymalizacyjne)
  5. Okna czasowe i tryb Optima
  6. Jak rozumieć wyniki
  7. Wskazówki dotyczące wydajności
  8. Przykład REST (X-API-Key → Dispatch)
  9. Przykład SOAP (SessionIDHeader → Dispatch)
  10. Rozwiązywanie problemów
  11. FAQ
  12. Kolejne kroki

Co możesz zbudować z API optymalizacji tras TrackRoad#

API umożliwia optymalizację tras dla typowych zastosowań biznesowych:

  • Systemy planowania tras dostaw (kurierzy, paczki, grocery)
  • Planowanie usług terenowych (technicy, naprawy, instalacje)
  • Dispatching floty z wieloma pojazdami i wieloma punktami
  • Workflow geokodowania i wyznaczania trasy krok po kroku
  • Zaawansowane tryby Dispatch dla różnych strategii routingu

Silnik routingu obsługuje ograniczenia takie jak:

  • Okna czasowe (ograniczenia przyjazdu i wyjazdu)
  • Limity pojemności (waga / objętość)
  • Równoważenie czasu i dystansu między pojazdami
  • Wiele punktów startu i zakończenia dla pojazdów
  • Przystanki przerw i czas obsługi na punkt

REST vs SOAP#

API REST (JSON/XML)

REST jest lekkie i powszechne w integracjach webowych i mobilnych. TrackRoad obsługuje wywołania REST z payloadami JSON lub XML.

API SOAP

SOAP jest powszechne w systemach enterprise i obsługuje silnie typowane referencje usług w .NET. SOAP jest przydatne, jeśli chcesz korzystać ze skompilowanych klas, takich jak DispatchSpecification, Vehicle i Location.

Uwierzytelnianie (TrackServiceKey)#

TrackRoad używa stabilnego klucza API o nazwie TrackServiceKey. Nie działa on jak klasyczny identyfikator sesji wygasający po czasie. Zobacz uwierzytelnianie API , aby poznać pełne szczegóły.

  • REST: wyślij klucz w nagłówku HTTP: X-API-Key: YOUR_TRACKSERVICEKEY
  • SOAP: wyślij klucz w SessionIDHeader jako SessionID

API Dispatch (główne wywołanie optymalizacyjne)#

Optymalizacja tras jest wykonywana za pomocą Dispatch. Dispatch przyjmuje pojazdy oraz punkty i zwraca zoptymalizowane trasy dla każdego pojazdu.

Pełna referencja: API Dispatch

Endpoint SOAP WSDL

http://trackservice.trackroad.com/trackservice.asmx?wsdl

Typowe dane wejściowe Dispatch

  • Pojazdy (każdy z lokalizacją startową i końcową)
  • Punkty (lokalizacje)
  • DispatchMode (Auto, EqualStop, SingleRegion, MultipleRegion, Optima itd.)
  • MinimumOptimization (precyzja)

Okna czasowe i tryb Optima#

TrackRoad obsługuje okna czasowe poprzez ograniczenia czasu przyjazdu i wyjazdu dla punktów. Aby uzyskać najlepsze wyniki, TrackRoad zaleca używanie DispatchMode Optima przy oknach czasowych.

Kluczowe zmienne

  • CanArriveEarly
  • TimeConstraintArrival
  • TimeConstraintDeparture

Jeśli Twój język nie potrafi przekazać wartości datetime null, użyj 0001-01-01T00:00:00. TrackRoad traktuje daty mniejsze lub równe 1 stycznia 2012 jako null.

Przeczytaj więcej: Optymalizacja tras z oknami czasowymi

Jak rozumieć wyniki Dispatch#

Dispatch zwraca zoptymalizowane trasy dla każdego pojazdu. Każdy wynik pojazdu zawiera uporządkowane punkty z metadanymi takimi jak:

  • Sekwencja punktów
  • MatchCode i jakość dopasowania adresu
  • Szerokość i długość geograficzna
  • Czas i dystans do następnego punktu

Wskazówki dotyczące wydajności i skalowania

  • Grupuj punkty, kiedy to możliwe, zamiast optymalizować jedną trasę naraz
  • Podawaj dokładny czas obsługi i okna czasowe, aby uzyskać realistyczne wyniki
  • Używaj trybu Optima dla harmonogramów z ograniczeniami
  • Zwiększ MinimumOptimization dla lepszej jakości przy większych zbiorach punktów
  • Używaj dispatchingu wielopojazdowego dla routingu floty zamiast osobnych żądań

Przykład REST JSON (X-API-Key → Dispatch)#

Ten przykład pokazuje zalecany przepływ REST z użyciem X-API-Key (TrackServiceKey).

Krok 1 — Ustaw nagłówki uwierzytelniania

Headers:
X-API-Key: YOUR_TRACKSERVICEKEY
Content-Type: application/json

Krok 2 — Dispatch (optymalizacja tras)

Dispatch przyjmuje pojazdy oraz punkty i zwraca zoptymalizowane trasy. Ten przykład używa jednego pojazdu i wielu punktów.

POST https://trackservice.trackroad.com/rest/dispatch
Headers:
X-API-Key: YOUR_TRACKSERVICEKEY
Content-Type: application/json

{
  "DispatchMode": "Optima",
  "DistanceUnit": "Mile",
  "MinimumOptimization": 1,
  "Vehicles": [
    {
      "Name": "Vehicle 1",
      "StartLocation": { "Name": "Depot", "Address": "350 5th Ave, New York, NY" },
      "FinishLocation": { "Name": "Depot", "Address": "350 5th Ave, New York, NY" },
      "TimeIn": "2025-12-25T08:00:00",
      "TimeOut": "2025-12-25T18:00:00",
      "CapacityWeight": 1000,
      "CapacityVolume": 100
    }
  ],
  "Stops": [
    {
      "Name": "Stop 1",
      "Address": "405 Lexington Ave, New York, NY",
      "ServiceTimeMinutes": 10,
      "TimeWindowStart": "2025-12-25T09:00:00",
      "TimeWindowEnd": "2025-12-25T11:00:00",
      "Weight": 120,
      "Volume": 12
    },
    {
      "Name": "Stop 2",
      "Address": "11 Wall St, New York, NY",
      "ServiceTimeMinutes": 8,
      "TimeWindowStart": "2025-12-25T10:00:00",
      "TimeWindowEnd": "2025-12-25T14:00:00",
      "Weight": 60,
      "Volume": 6
    },
    {
      "Name": "Stop 3",
      "Address": "200 Central Park West, New York, NY",
      "ServiceTimeMinutes": 12,
      "Weight": 80,
      "Volume": 8
    }
  ]
}

Wskazówka: Dla okien czasowych używaj DispatchMode = Optima. Jeśli integracja nie może wysyłać wartości null, użyj domyślnej daty, takiej jak 0001-01-01T00:00:00, aby reprezentować “null”.

Przykład curl

curl -X POST "https://trackservice.trackroad.com/rest/dispatch" \
  -H "X-API-Key: YOUR_TRACKSERVICEKEY" \
  -H "Content-Type: application/json" \
  -d @dispatch-request.json

Legacy Login i Logout są dostępne dla zachowania zgodności wstecznej. W większości integracji używaj X-API-Key (TrackServiceKey) w każdym żądaniu.

Przykład SOAP C# (SessionIDHeader → Dispatch)

Uwierzytelnianie SOAP w TrackRoad używa SessionIDHeader.SessionID = TrackServiceKey. Zobacz uwierzytelnianie , aby poznać pełne szczegóły.

Endpoint SOAP WSDL

http://trackservice.trackroad.com/trackservice.asmx?wsdl

Przykład SOAP C# krok po kroku

using System;
using System.Collections.Generic;
using TrackServiceRef; // your generated SOAP reference namespace

public class TrackRoadSoapExample
{
    public static void OptimizeRoutesWithSoap()
    {
        var client = new TrackServiceSoapClient();

        // TrackRoad SOAP uses TrackServiceKey as SessionID.
        string sessionId = "YOUR_TRACKSERVICEKEY";

        // Vehicles
        var vehicle = new Vehicle
        {
            Name = "Vehicle 1",
            StartLocation = new Location { Name = "Depot", Address = "350 5th Ave, New York, NY" },
            FinishLocation = new Location { Name = "Depot", Address = "350 5th Ave, New York, NY" },
            TimeIn = new DateTime(2025, 12, 25, 8, 0, 0),
            TimeOut = new DateTime(2025, 12, 25, 18, 0, 0),
            CapacityWeight = 1000,
            CapacityVolume = 100
        };

        // Stops
        var stops = new List<Location>
        {
            new Location
            {
                Name = "Stop 1",
                Address = "405 Lexington Ave, New York, NY",
                ServiceTime = 10,
                TimeConstraintArrival = new DateTime(2025, 12, 25, 9, 0, 0),
                TimeConstraintDeparture = new DateTime(2025, 12, 25, 11, 0, 0),
                CanArriveEarly = true,
                Weight = 120,
                Volume = 12
            },
            new Location
            {
                Name = "Stop 2",
                Address = "11 Wall St, New York, NY",
                ServiceTime = 8,
                TimeConstraintArrival = new DateTime(2025, 12, 25, 10, 0, 0),
                TimeConstraintDeparture = new DateTime(2025, 12, 25, 14, 0, 0),
                CanArriveEarly = true,
                Weight = 60,
                Volume = 6
            },
            new Location
            {
                Name = "Stop 3",
                Address = "200 Central Park West, New York, NY",
                ServiceTime = 12,
                Weight = 80,
                Volume = 8
            }
        };

        // Dispatch spec
        var spec = new DispatchSpecification
        {
            DispatchMode = DispatchMode.Optima,
            DistanceUnit = DistanceUnit.Mile,
            MinimumOptimization = 1,
            CurrentTime = DateTime.MinValue
        };

        // Dispatch
        var dispatchResult = client.Dispatch(sessionId, spec, new[] { vehicle }, stops.ToArray());

        if (!dispatchResult.Success)
            throw new Exception("Dispatch failed: " + dispatchResult.Message);

        foreach (var route in dispatchResult.Routes)
        {
            Console.WriteLine($"Vehicle: {route.VehicleName}");
            Console.WriteLine($"Distance: {route.Distance}");
            Console.WriteLine($"Duration: {route.Duration}");

            foreach (var stop in route.Stops)
                Console.WriteLine($"  {stop.Sequence}. {stop.Name}  ETA: {stop.ETA}");
        }
    }
}

Uwagi

  • Używaj trybu Optima dla okien czasowych i harmonogramów.
  • Podawaj godziny pracy kierowcy (TimeIn, TimeOut), aby routing był realistyczny.
  • Jeśli nie możesz podać wartości datetime null, użyj DateTime.MinValue albo reguły daty null.

Rozwiązywanie problemów: typowe błędy API i sposoby ich naprawy#

Optymalizacja tras to problem oparty na ograniczeniach. Jeśli podasz nieprawidłowe adresy lub niemożliwe ograniczenia, takie jak bardzo wąskie okna czasowe, zbyt mało pojazdów lub przekroczone limity pojemności, silnik Dispatch może zwrócić błędy albo niekompletne trasy.

1) “Dispatch failed” lub Success = false

  • Nieprawidłowe lub niepełne adresy punktów
  • Niemożliwe okna czasowe
  • Zbyt krótkie godziny pracy pojazdu
  • Zbyt mało pojazdów, aby obsłużyć wszystkie punkty
  • Przekroczone ograniczenia pojemności

2) Niektóre punkty znikają z tras

Typowe przyczyny:

  • Zbyt restrykcyjne okna czasowe
  • Zbyt restrykcyjne godziny pracy
  • Przekroczona pojemność
  • Czas obsługi powoduje, że harmonogram staje się niewykonalny

3) Nieprawidłowe lub niskiej jakości dopasowania adresów (problemy MatchCode)

  • Podawaj pełne adresy (ulica, miasto, kod pocztowy, kraj)
  • Jeśli masz już współrzędne, wyślij Latitude i Longitude
  • W razie potrzeby weryfikuj punkty geokodowaniem przed Dispatch

4) Okna czasowe są niewykonalne

  • Użyj DispatchMode Optima
  • Poszerz okna czasowe
  • Pozwól na wcześniejszy przyjazd (CanArriveEarly = true), jeśli to właściwe
  • Dodaj więcej pojazdów albo wydłuż godziny pracy pojazdów

5) Za mało pojazdów lub niepełny routing floty

  • Dodaj więcej pojazdów
  • Zwiększ pojemność (waga i objętość)
  • Wydłuż godziny pracy
  • Użyj DispatchMode MinimumVehicles, jeśli celem jest minimalizacja wymaganej liczby pojazdów

6) API zwraca “key invalid” (uwierzytelnianie)

Uwierzytelnianie TrackRoad używa stabilnego klucza API o nazwie TrackServiceKey. “Key invalid” zwykle oznacza, że klucz jest brakujący, niepoprawny albo wysłany w złym miejscu.

  • REST: wyślij X-API-Key: TrackServiceKey
  • SOAP: wyślij SessionIDHeader.SessionID = TrackServiceKey
  • Zobacz uwierzytelnianie API , aby poznać dokładne szczegóły.

FAQ: API optymalizacji tras#

Czy TrackRoad oferuje API optymalizacji tras?
Tak. TrackRoad oferuje API do optymalizacji tras i dispatchingu przez REST (JSON/XML) oraz SOAP.
Czym jest API Dispatch w TrackRoad?
Dispatch to główna metoda optymalizacji, która przyjmuje pojazdy i punkty oraz zwraca zoptymalizowane trasy dla każdego pojazdu. Zobacz referencję API Dispatch .
Jak uwierzytelnić żądania do API TrackRoad?
TrackRoad używa stabilnego klucza API o nazwie TrackServiceKey. REST używa X-API-Key; SOAP używa SessionIDHeader.SessionID. Zobacz uwierzytelnianie API .
Dlaczego pojawiają się błędy “key invalid”?
“Key invalid” zwykle oznacza, że TrackServiceKey jest brakujący, niepoprawny albo wysłany w złym miejscu. REST: X-API-Key. SOAP: SessionIDHeader.

Kolejne kroki

Przejrzyj pełną dokumentację deweloperską, otwórz interfejs Swagger albo wypróbuj narzędzia TrackRoad, jeśli chcesz przetestować workflow routingu.

Otwórz dokumentację API Wypróbuj narzędzie optymalizacji tras