"Jāņa sēta" piedāvā vairākus uz Valhalla bāzes veidotus servisus kravas (smagā) autotransporta maršrutēšanai.

  • Maršruta izveides serviss (route) ļauj izveidot maršrutu starp diviem vai vairākiem punktiem.
  • Attāluma tabulas serviss (table) atgriež attāluma un ceļā pavadāmā laika vērtības starp definētajiem sākumpunktiem un galapunktiem, ļaujot atrast katram sākumpunktam tuvākos galapunktus.

Kā maršrutēšanas dzinējs tiek izmantota Valhalla. Maršrutu veidošanai un citiem servisiem tiek izmantoti "Jāņa sētas" ceļu dati Latvijā un OSM (OSM contributors) dati Igaunijā un Lietuvā. Maršrutēšanā Pēc noklusējuma tiek ņemti vērā gan masas, gan gabarītu (augstums, platums, garums) ierobežojumi. Papildu šiem datiem reizi dienā tiek atjaunoti dinamiskie un virtuālie masas un gabarītu ierobežojumi no Latvijas Valsts ceļu Nacionālā piekļuves punkta. Atšķirībā no parastās maršrutēšanas, kravas maršrutēšanā ir vairāki citi pieprasījuma parametri, kas specifiski pielāgoti kravas pārvadāšanas vajadzībām.

Maršruta izveides serviss

Maršruta izveides serviss ļauj izveidot maršrutu starp diviem vai vairākiem punktiem.

Servisa URL

Servisa saitei jāatbilst šādai formai:

https://api.kartes.lv/v3//directions/cargo/{service}/{coordinates}?

Atgriezto datu formāts ir JSON.

HTTP metode var būt GET vai POST.

Standarta maršruta izveide

Standarta maršruta izveides serviss (route) ļauj izveidot kravas (smagā autotransporta) maršrutu starp diviem vai vairākiem punktiem (maksimāli 50 punkti).

Servisa saitei jāatbilst šādai formai:

https://api.kartes.lv/v3//directions/cargo/route/{coordinates}?

Pieprasījuma parametri

Iespējams padot šādus GET parametrus:

Parametrs Skaidrojums Vērtības
profile Maršrutēšanas veids. cargo
Obligāts
coordinates Maršruta galapunktu koordinātas (koordināšu pāri WGS-84 (EPSG:4326) koordinātu sistēmā). Iespējams padot līdz 50 punktiem. x1,y1;x2,y2;…;xn,yn, kur:
  • x1 - X koordināta punktam, no kura tiek veikta maršrutēšana;
  • y1 - Y koordināta punktam, no kura tiek veikta maršrutēšana;
  • x2 - X koordināta punktam, uz kuru tiek veikta maršrutēšana;
  • y2 - Y koordināta punktam, uz kuru tiek veikta maršrutēšana;
  • xn - X koordināta pēdējam punktam maršrutā;
  • yn - Y koordināta pēdējam punktam maršrutā.
Obligāts
alternatives Alternatīvo maršrutu skaits. Alternatīvos maršrutus atgriež atkarībā no maršruta (visiem maršrutiem var neatgriezt)
  • true vai 1 - atgriež alternatīvu maršrutu;
  • false vai 0 - neatgriež alternatīvu maršrutu (pēc noklusējuma)
Neobligāts
geometries Atgrieztās ģeometrijas formāts.
  • polyline (pēc noklusējuma);
  • polyline6;
  • geojson
Neobligāts
steps Maršruta informācija pa tā posmiem. Formāts: true/false
  • true - atgriež;
  • false - neatgriež (pēc noklusējuma)
Neobligāts
overview Pārskata ģeometrija — vienkāršota vai detalizēta.
  • simplified - atgriež vienkāršotu (pēc noklusējuma);
  • full - atgriež detalizētu;
  • false - neatgriež
Neobligāts
continue_straight Norāda, vai maršruta galapunktos drīkst apgriezties braukšanai pretējā virzienā.
  • true - neapgriežas (pēc noklusējuma);
  • false - apgriežas.
Neobligāts
exclude_unpaved Vai izvairīties no neasfaltētiem ceļiem Formāts: true/false
  • true – neizmantot neasfaltētus ceļus (tie gan tiek izmantoti, lai nokļūtu no sākumpunkta, piekļūtu galamērķim)
  • false – drīkst izmantot (noklusējums)
Neobligāts
weight Transportlīdzekļa masa (t) Formāts: jebkurš pozitīvs decimālskaitlis.
Pēc noklusējuma: 21.77.
Neobligāts
height Transportlīdzekļa augstums (m) Formāts: jebkurš pozitīvs decimālskaitlis.
Pēc noklusējuma: 4.0.
Neobligāts
length Transportlīdzekļa garums (m) Formāts: jebkurš pozitīvs decimālskaitlis.
Pēc noklusējuma: 21.5.
Neobligāts
width Transportlīdzekļa platums (m) Formāts: jebkurš pozitīvs decimālskaitlis.
Pēc noklusējuma: 2.6.
Neobligāts
axle_load Maksimālā slodze uz vienas ass Formāts: jebkurš pozitīvs decimālskaitlis.
Pēc noklusējuma: 9
Neobligāts
axle_count Asu skaits (lai aprēķinātu slodzi uz ass) Formāts: jebkurš pozitīvs vesels skaitlis.
Pēc noklusējuma: 5
  • Piemēram: 2, 3, 4 u.c.
Neobligāts
top_speed Transportlīdzekļa maksimālais ātrums (km/h) Formāts: jebkurš pozitīvs skaitlis.
Pēc noklusējuma: 90
Neobligāts
use_ferry Vēlme izmantot prāmjus Formāts: skaitlis starp 0 un 1
Pēc noklusējuma: 1 Neobligāts
use_highways Vēlme izmantot automaģistrāles Formāts: skaitlis starp 0 un 1
Pēc noklusējuma: 1
Neobligāts
use_tolls Vēlme izmantot izmantot maksas ceļus Formāts: skaitlis starp 0 un 1
Pēc noklusējuma: 1
Neobligāts
use_living_streets Vēlme izmantot izmantot dzīvojamo zonu ielas Formāts: skaitlis starp 0 un 1
Pēc noklusējuma: 0.5
Neobligāts
use_tracks Vēlme izmantot grūti izbraucamus zemesceļus Formāts: skaitlis starp 0 un 1
Pēc noklusējuma: 0 Neobligāts
ignore_access Ignorēt piekļuves ierobežojumus Formāts: true/false
  • true – ignorēt ierobežojumus
  • false – ievērot (noklusējums)
Neobligāts
exclude_polygons Šķērsošanai aizliegtā teritorija Formāts: daudzstūra virsotņu koordinātas JSON formātā (piemēram, [[[24.175294481,56.926900345],[24.175347848,56.927333544],[24.174760811,56.927260738],[24.175294481,56.926900345]]])
Pēc noklusējuma: nav izmantots.
Neobligāts
country_crossing_penalty Sods par valsts robežas šķērsošanu sekundēs (mudina izvairīties no tranzīta caur kaimiņvalsti). Sods neietekmē maršruta ilguma aprēķinu. Formāts: jebkurš pozitīvs skaitlis starp 0 un 10 000.
Pēc noklusējuma: 0.
Neobligāts
date_time Laika zīmogs (timestamp) ar sekundēm un laika zonu. Ļauj veidot precīzākus maršrutus ārpus pašreizējā laika, ņemot vērā ierobežojumus ar laika logiem, kā arī vidējo satiksmes ātrumu. Formāts: 2026-04-09T00:00:00Z", "2026-04-09T14:30:00+02:00"
Pēc noklusējuma: pašreizējais laiks.
Neobligāts
date_time_type Padotā laika zīmoga nozīme
  • departure - izbraukšanas laiks (noklusētā vērtība);
  • arrival - ierašanās laiks;
  • constant - konstants laiks visa brauciena garumā
Neobligāts

Atbildes parametri

Atbildē tiek atgriezti šādi parametri un objekti:

Parametrs Skaidrojums
code Pieprasījuma sekmīgums. Ja sekmīgs, atbilde ir ok.
waypoints Galapunktu objekts
distance Attālums no dotajām koordinātām līdz galapunkta koordinātām metros.
location Atrašanās vietas (galapunkta, krustojuma, manevra) koordinātas, kuras tiek izmantotas doto koordinātu vietā (atrodas uz dotā ceļa tīkla).
name Galapunkta ielas nosaukums (ja ir).
routes Maršrutu objekts.
legs Maršruta posma starp diviem galapunktiem (RoutLeg) objekts. Posmam vai posmiem (ja ir vairāk nekā divi galapunkti) seko distance, duration, weight, summary parametri.
  steps Maršruta soļu apraksta objekts. Solim seko vairāki parametri (to skaitā location (atrašanās vietas (galapunkta, krustojuma, manevra) koordinātas, kuras tiek izmantotas doto koordinātu vietā (atrodas uz ceļa tīkla)).
  weight Svars (tiek izmantots prioritizēšanā).
  distance Garums metros.
  summary Maršruta posma aprakstošs nosaukums (piemēram, "Daugavgrīvas iela, Krišjāņa Valdemāra iela").
  duration Ilgums sekundēs.
weight_name Svara profila nosaukums.
geometry Maršruta ģeometrija. Atkarīga no overview parametra, formātu nosaka geometries parametrs.
weight Svars (tiek izmantots maršrutu prioritizēšanā).
distance Garums metros.
duration Ilgums sekundēs.

Statusa kodi

Kods Skaidrojums
200 Wrong input data. Tiek atgriezts, ja vaicājumā nav ievadīti vai nav korekti ievadīti pieprasījuma parametri.
404 No location found. Tiek atgriezts, ja nekas nav ticis atrasts.
5xx Servera kļūda.

Paraugi

Pieprasījums:

https://api.kartes.lv/v3//directions/cargo/route/24.063475,56.815017;24.506378,56.802025?overview=full&steps=true

Atbilde:

{
 "routes": [
  {
   "weight_name": "truck",
   "weight": 1186.615,
   "duration": 1284.275,
   "distance": 30271.357,
   "legs": [
    {
     "via_waypoints": [],
     "admins": [
      []
     ],
     "weight": 1186.615,
     "duration": 1284.275,
     "steps": [],
     "distance": 30271.357,
     "summary": "A5, Rīgas HES–Jaunjelgava"
    }
   ],
   "geometry": "mxujkBoou{l@mWfEkR~Cct@vLw|AjWwLvBo_E~p@wQrDkCz@{OnFwLzEwGrDwBnAcGzEsD~C_IbGoP~Rs|BzyDcBjC{JbLg@RoFzEcG~CsIrDoAf@oFjCoFnA{Ez@gr@nFoKwG_D{E_DsIwB_N?oKf@_IRcQ~f@skCrDgTbt@kkEfm@gyDrv@w|Fns@kbG~MoqAfTczBvQwuBrjAobPnlAkqQ~iAwmPbQcnCzdBocWj\\_{Eb[svE~iAwwPjoC_fa@z@cLbe@wdHr]ccFjz@c_MzTkmDfEcy@bGwhAfJw_CvLsiDbBwy@jCchAbBw~@z@{w@z@co@bBcqDRcuGkC_rBScL?sDgEopDwBccA_SouI_Ic}CwBwcA{@sSs{@ku^_NgzF_I{jDsNs~F_D_tA_DsyA_NsoFoFskC?wLRcGRsDf@sDnAoFjC{JRg@nAcBz@oARg@z@wBz@kCz@_Df@_DR_Df@sD?_DRsDSsD?sDScBS{@SsDg@_D{@kC{@kC{@kC{@wBoAcBoAcBSS_DoFwB{EcBoFoAkHoAoK{@wLcBwQcB{h@wGktCoK{cEwL{kFs]w`OwBsq@kCw~@wBkp@{JkqBsDkz@fEwBrDsD~C{EvBkHbBsIf@cGf@cBRgJ?g@?oAS{E?cBS{@g@kHcBsIkCwG_DcGsDsDgEcB{Eg@{Ef@gJknAoP_|BwGco@oFoi@oFoi@_NkxAgY{}Bs]g}BkWoeB{@sD_yA_uHsXstAwxCcxMsoAg_GkRg|@w`@{dBcrAscGwG{YoZguA_]w|AwQ_`AgTs`AwQgaAcLsv@_Icj@wG{r@kH{|@kCsg@cGsmBg@sl@Rg}BzEgrE?sDzE_lEbB{gCz@obAbGwyEf@stAvB{iBbGk|DbQ{qMzEopDnAgaAjCscBjMceJbB{fArDwmAzE_tAjHwwAjHguAbcAwcPrDgm@fEsl@~HsoAzEsv@rN{xBjk@kpJnA_SrIo`BnPowC?wBrD_{@bBct@?sD~CwuB~CkjC~CwgDjC_xDbBc_Cz@ku@bBsyAR_Sz@soARco@f@s]f@w~@R{^Rce@nA{pAz@kz@z@knAbGsrGRsXbBg}B~CouDnFggHrIg}L~CcuBrIwbDrDwt@~HolAbG_`AbL_tAnPoeBnKkdArDc`@v`@kaE~p@kvGb`@{eDfTc|AvV_~Aja@{sB~z@snD~a@guAzr@w_CbGgTnKo_@~k@wpBrI{Y~_AowCv`@wmAjM_b@vBkHf@cBz{C_eKvt@o~BzbCofIjW_v@bmAceEzm@{lCjCoPve@{vCbBoKpL{I"
  }
 ],
 "waypoints": [
  {
   "distance": 14.43,
   "name": "Baloži–Plakanciems–Iecava",
   "location": [24.06324, 56.814999]
  },
  {
   "distance": 8.933,
   "name": "",
   "location": [24.506244, 56.801993]
  }
 ],
 "code": "Ok"
}

Pielietošanas piemērs

Pielietošanas piemērs maršrutēšanas servisa pielietošanai un attēlošanai Leaflet karšu bibliotēkā.

Jāimportē Leaflet bibliotēka (vajadzētu izmantot aktuālo versiju atbilstoši dokumentācijai):

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
    integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
    crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
    integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
    crossorigin=""></script>

HTML kodā jāizveido kartes elements:

<div id="map" style="width: 100%; height: 100vh;"></div>

JavaScript kodā jāizveido karte im jādefinē maršrutēšanas API klase:

const api_key = 'your_api_key_here'; // Replace with your actual API key

const map = L.map('map', {
    layers: [
        L.tileLayer.wms(`https://wms{s}.kartes.lv/${api_key}/wgs/15bw/`, {
            subdomains: ['', '1', '2', '3', '4'],
            attribution: '<a href="https://balticmaps.eu" target="_blank">Jāņa sēta</a>',
        }),
    ],
    center: [56.96, 24.11],
    zoom: 12,
})

class DirectionsApi {
    constructor() {
        this.apiKey = api_key;
        this.baseUrl = 'https://api.kartes.lv/v3';
    }

    // Method to fetch directions
    async getDirections(coordinates, options = {}) {
        const coords = coordinates.map(innerArray => innerArray.join(',')).join(';');

        // Allow various options to be passed to the API
        const queryString = new URLSearchParams({
            overview: options.overview || 'full',
            steps: options.steps || 'true',
            geometries: options.geometries || 'geojson',
            source: options.source || 'first',
            destination: options.destination || 'last',
        }).toString();

        const url = `${this.baseUrl}/${this.apiKey}/directions/cargo/route/${coords}?${queryString}`;

        try {
            const response = await fetch(url);

            // Check if the response is ok (status code 200-299)
            if (!response.ok) {
                throw new Error(`Error fetching data: ${response.statusText}`);
            }

            const data = await response.json();
            return { success: true, data };
        } catch (error) {
            console.error('Fetch error:', error);
            return { success: false, error: error.message };
        }
    }
}

Vēl nepieciešams maršrutu pārveidot attēlojamā GeoJSON formātā. To var izdarīt, piemēram, ar šādu funkciju, kas GeoJSON formātā ieraksta gan visu maršrutu, gan tā posmus, gan pieturpunktus:

const convertToGeoJSON = (data) => {
    if (data.code !== "Ok") {
        throw new Error("Invalid data");
    }

    const geojson = {
        type: "FeatureCollection",
        features: []
    };

    // Convert trips to GeoJSON features
    data.trips.forEach(trip => {
        // Add the main trip route as a LineString
        geojson.features.push({
            type: "Feature",
            geometry: trip.geometry,
            properties: {
                type: "trip",
                summary: trip.legs.map(leg => leg.summary).join(", "),
                weight: trip.weight,
                duration: trip.duration,
                distance: trip.distance
            }
        });

        // Add each step in the trip as a separate feature
        trip.legs.forEach(leg => {
            leg.steps.forEach(step => {
                geojson.features.push({
                    type: "Feature",
                    geometry: step.geometry,
                    properties: {
                        type: "step",
                        mode: step.mode,
                        maneuver: step.maneuver,
                        name: step.name,
                        duration: step.duration,
                        distance: step.distance,
                        drivingSide: step.driving_side,
                        intersections: step.intersections
                    }
                });
            });
        });
    });

    // Convert waypoints to GeoJSON features
    data.waypoints.forEach(waypoint => {
        geojson.features.push({
            type: "Feature",
            geometry: {
                type: "Point",
                coordinates: waypoint.location
            },
            properties: {
                type: "waypoint",
                waypoint_index: waypoint.waypoint_index,
                trips_index: waypoint.trips_index,
                distance: waypoint.distance,
                name: waypoint.name
            }
        });
    });

    return geojson;
}

Visbeidzot iespējams pielietot izveidoto API klasi:

// Instantiate the DirectionsAPI class with your API key
const api = new DirectionsAPI(api_key);

// Example stops
const coordinates = [
    [24.063475, 56.815017],
    [24.506378, 56.802025],
    [23.792679, 56.768295]
];

api.getDirections(coordinates)
    .then(result => {
        if (!result.success) {
            console.error('Error:', result.error); // Handle the error
            return;
        }

        // Add the route in GeoJSON format to the map
        L.geoJSON(convertToGeoJSON(result.data), {
            style: (feature) => {
                color: "rgba(20, 137, 255, 0.7)",
                weight: 5
            }
        }).bindPopup((layer) => {
            return `${layer.feature.properties.distance} m`
        }).addTo(map);
    });

Attālumu tabulas (distance matrix) serviss

Attālumu tabulas jeb matricas (distance matrix) serviss ļauj saņemt kravas auto maršruta attālumu un pārvietošanās laiku starp visiem norādītajiem koordināšu pāriem (piem., novērtēt visus attālumus starp četrām Latvijas pilsētām, iegūstot vērtības Rīga—Cēsis, Rīga—Valmiera, Rīga—Sigulda, Valmiera—Cēsis, Valmiera—Sigulda, Sigulda—Cēsis; atrast ātrāk sasniedzamo veikalu no konkrētas vietas (piem., pašreizējās atrašanās vietas koordinātām)). Servisam var padot ne vairāk kā 50 koordinātu pāru. Pieprasījumā jādefinē, kuras koordinātas ir "izejas punkti"/sākumpunkti (sources) un uz kuriem punktiem jāveic ceļš (destinations). Var izmantot gan autobraucēju, gan gājēju profilu.

Attālumu tabulas pieprasījuma papildu parametri

Servisa saitei jāatbilst šādai formai:

https://api.kartes.lv/v3//directions/cargo/table/{coordinates}?

Papildu maršrutu izveides servisam padotajiem parametriem, jāizmanto šādi papildu parametri:

Parametrs Skaidrojums Vērtības
sources Definē, kuri no koordinātu pāriem ir sākumpunkti, no kurienes jārēķina pārvietošanās ilgums vai attālums. Tie jānorāda, balstoties ievadīto koordināšu secībā.
  • all - visi (noklusētā vērtība)
  • 0;1;2; … n - - tiek izmantotie konkrētie koordināšu pāri (atdalīti ar semikolu)
destinations Definē, kuri no koordinātu pāriem ir galamērķi, uz kuriem jārēķina pārvietošanās ilgums vai attālums. Tie jānorāda, balstoties ievadīto koordināšu secībā.
  • all - visi (noklusētā vērtība)
  • 0;1;4; … n - tiek izmantotie konkrētie koordināšu pāri (atdalīti ar semikolu)

Attālumu tabulas papildu parametri

Parametrs Skaidrojums
code Pieprasījuma izpildes statuss. Ja sekmīgs, atbilde ir Ok. Ja maršrutu nav iespējams aprēķināt, var tikt atgriezta vērtība NoTable.
sources Masīvs ar sākumpunktu objektiem. Katrs objekts satur punkta koordinātas (location), punkta nosaukumu (atvasinās no ielas; name) un attālumu no ceļa tīkla metros (distance)
destinations Masīvs ar galamērķu objektiem. Katrs objekts satur punkta koordinātas (location), punkta nosaukumu (atvasinās no ielas; name) un attālumu no ceļa tīkla metros (distance)
durations Divdimensiju masīvs ar matricu, kas atgriež pārvietošanās laika vērtības sākumpunkts-galapunkts secībā. Rezultātu secību nosaka ievadīto sākumpunktu secība. Ilgums tiek atgriezts sekundēs.
distances Divdimensiju masīvs ar matricu, kas atgriež attāluma vērtības sākumpunkts-galapunkts secībā. Rezultātu secību nosaka ievadīto sākumpunktu secība. Attālums tiek atgriezts metros.

Paraugi

Pieprasījums (lai atgrieztu ilgumus starp atrašanās vietām — ⚠️ nav pieejams ar DEMO atslēgu):

https://api.kartes.lv/v3//directions/cargo/table/24.003239,56.933707;24.282145,57.003296;23.125405,57.333013;24.405398,57.317922?sources=0;1&destinations=2;3

Atbilde:

{
  "code": "Ok",
  "sources": [
    {
      "location": [24.00324, 56.9337],
      "name": "Grenču iela",
      "distance": 0.781
    },
    {
      "location": [24.282183, 57.00326],
      "name": "",
      "distance": 4.552
    }
  ],
  "destinations": [
    {
      "location": [23.12539, 57.33297],
      "name": "Lielā iela",
      "distance": 4.87
    },
    {
      "location": [24.4054, 57.317933],
      "name": "",
      "distance": 1.313
    }
  ],
  "durations": [
    [6252, 6210],
    [8356, 3904]
  ],
  "distances": [
    [86174, 75406],
    [110802, 51336]
  ]
}