Calcul d'itinéraire — Démo interactive
Tracez un itinéraire routier entre deux points français. Chaque borne accepte une adresse libre
(résolue via la chaîne /address/verify) ou un couple lat/lon WGS84.
Carte, étapes détaillées et durée fournies par Valhalla sur les tuiles OpenStreetMap France.
48.859709, 2.346998
49.009700, 2.547900
Données cartographiques © les contributeurs OpenStreetMap, sous licence ODbL — https://www.openstreetmap.org/copyright
Étapes détaillées
Survolez une étape pour la mettre en évidence sur la carte.
-
Conduisez vers le nord-ouest sur Rue des Halles.
-
Serrez à gauche pour rester sur Rue des Halles.
-
Serrez à gauche dans Rue des Déchargeurs.
-
Tournez à droite dans Rue de Rivoli.
-
Tournez à gauche dans Rue Bertin Poirée.
-
Tournez à gauche dans Quai de la Mégisserie.
-
Serrez à droite dans Quai de la Rapée.
-
Gardez la gauche pour rester sur Quai de la Rapée.
-
Serrez à droite vers A 3/A 6/Périphérique/Porte de Bercy.
-
Continuez tout droit pour prendre la bretelle.
-
Gardez la gauche pour prendre E 15/Boulevard Périphérique Extérieur vers A 3/A 1/Charles de Gaulle/Périphérique Extérieur.
-
Prenez la bretelle A 3 vers A 16/Lille - Bruxelles/Charles de Gaulle/Bobigny.
-
Gardez la gauche pour rester sur A 3/E 15.
-
Gardez la gauche pour rester sur A 3/E 15 vers A 16/A 15/A 1/Sarcelles.
-
Gardez la droite pour rester sur A 3 vers Charles de Gaulle.
-
Continuez vers Charles de Gaulle.
-
Gardez la droite vers Roissypole/Zone Technique/Zone Cargo/Longue Durée PR-PX.
-
Gardez la gauche à la fourche.
-
Gardez la droite à la fourche.
-
Serrez à droite dans Route de la Commune.
-
Gardez la droite pour rester sur Route de la Commune.
-
Gardez la gauche pour rester sur Route de la Commune.
-
Votre destination est sur la droite.
Bounding box (WGS84)
- min_lat
48.826572- min_lon
2.344384- max_lat
49.009305- max_lon
2.550256
curl -X POST "https://api.trustydata.app/services/v1/route/compute" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"destination": {"lat": 49.0097, "lon": 2.5479}, "origin": {"address": "1 Place du Trocad\u00e9ro, 75016 Paris"}}'
import requests
url = "https://api.trustydata.app/services/v1/route/compute"
headers = {"Authorization": "Bearer VOTRE_CLE_API"}
payload = {"destination": {"lat": 49.0097, "lon": 2.5479}, "origin": {"address": "1 Place du Trocad\u00e9ro, 75016 Paris"}}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
print(f"{data['resume']['distance_km']} km · {data['resume']['duree_min']} min")
for etape in data["etapes"]:
print(f" {etape['distance_km']:>6.2f} km — {etape['consigne']}")
{
"attribution": "Donn\u00e9es cartographiques \u00a9 les contributeurs OpenStreetMap, sous licence ODbL \u2014 https://www.openstreetmap.org/copyright",
"destination": {
"adresse": null,
"lat": 49.0097,
"lon": 2.5479,
"source": "coordinates"
},
"etapes": [
{
"consigne": "Conduisez vers le nord-ouest sur Rue des Halles.",
"distance_km": 0.05,
"duree_s": 6.025,
"index_debut": 0,
"index_fin": 2,
"type": 2
},
{
"consigne": "Serrez \u00e0 gauche pour rester sur Rue des Halles.",
"distance_km": 0.002,
"duree_s": 0.644,
"index_debut": 2,
"index_fin": 3,
"type": 16
},
{
"consigne": "Serrez \u00e0 gauche dans Rue des D\u00e9chargeurs.",
"distance_km": 0.091,
"duree_s": 16.913,
"index_debut": 3,
"index_fin": 10,
"type": 16
},
{
"consigne": "Tournez \u00e0 droite dans Rue de Rivoli.",
"distance_km": 0.042,
"duree_s": 6.591,
"index_debut": 10,
"index_fin": 11,
"type": 10
},
{
"consigne": "Tournez \u00e0 gauche dans Rue Bertin Poir\u00e9e.",
"distance_km": 0.184,
"duree_s": 28.231,
"index_debut": 11,
"index_fin": 24,
"type": 15
},
{
"consigne": "Tournez \u00e0 gauche dans Quai de la M\u00e9gisserie.",
"distance_km": 2.387,
"duree_s": 286.524,
"index_debut": 24,
"index_fin": 140,
"type": 15
},
{
"consigne": "Serrez \u00e0 droite dans Quai de la Rap\u00e9e.",
"distance_km": 0.108,
"duree_s": 7.798,
"index_debut": 140,
"index_fin": 146,
"type": 9
},
{
"consigne": "Gardez la gauche pour rester sur Quai de la Rap\u00e9e.",
"distance_km": 2.046,
"duree_s": 147.509,
"index_debut": 146,
"index_fin": 179,
"type": 24
},
{
"consigne": "Serrez \u00e0 droite vers A 3/A 6/P\u00e9riph\u00e9rique/Porte de Bercy.",
"distance_km": 0.457,
"duree_s": 34.062,
"index_debut": 179,
"index_fin": 191,
"type": 9
},
{
"consigne": "Continuez tout droit pour prendre la bretelle.",
"distance_km": 0.009,
"duree_s": 0.657,
"index_debut": 191,
"index_fin": 192,
"type": 17
},
{
"consigne": "Gardez la gauche pour prendre E 15/Boulevard P\u00e9riph\u00e9rique Ext\u00e9rieur vers A 3/A 1/Charles de Gaulle/P\u00e9riph\u00e9rique Ext\u00e9rieur.",
"distance_km": 4.817,
"duree_s": 352.291,
"index_debut": 192,
"index_fin": 270,
"type": 24
},
{
"consigne": "Prenez la bretelle A 3 vers A 16/Lille - Bruxelles/Charles de Gaulle/Bobigny.",
"distance_km": 6.786,
"duree_s": 329.267,
"index_debut": 270,
"index_fin": 401,
"type": 18
},
{
"consigne": "Gardez la gauche pour rester sur A 3/E 15.",
"distance_km": 8.86,
"duree_s": 320.902,
"index_debut": 401,
"index_fin": 516,
"type": 24
},
{
"consigne": "Gardez la gauche pour rester sur A 3/E 15 vers A 16/A 15/A 1/Sarcelles.",
"distance_km": 1.616,
"duree_s": 64.727,
"index_debut": 516,
"index_fin": 533,
"type": 24
},
{
"consigne": "Gardez la droite pour rester sur A 3 vers Charles de Gaulle.",
"distance_km": 1.256,
"duree_s": 50.304,
"index_debut": 533,
"index_fin": 554,
"type": 23
},
{
"consigne": "Continuez vers Charles de Gaulle.",
"distance_km": 0.656,
"duree_s": 26.246,
"index_debut": 554,
"index_fin": 566,
"type": 8
},
{
"consigne": "Gardez la droite vers Roissypole/Zone Technique/Zone Cargo/Longue Dur\u00e9e PR-PX.",
"distance_km": 0.796,
"duree_s": 41.053,
"index_debut": 566,
"index_fin": 579,
"type": 23
},
{
"consigne": "Gardez la gauche \u00e0 la fourche.",
"distance_km": 0.609,
"duree_s": 35.547,
"index_debut": 579,
"index_fin": 591,
"type": 24
},
{
"consigne": "Gardez la droite \u00e0 la fourche.",
"distance_km": 0.28,
"duree_s": 20.178,
"index_debut": 591,
"index_fin": 606,
"type": 23
},
{
"consigne": "Serrez \u00e0 droite dans Route de la Commune.",
"distance_km": 0.221,
"duree_s": 15.939,
"index_debut": 606,
"index_fin": 613,
"type": 9
},
{
"consigne": "Gardez la droite pour rester sur Route de la Commune.",
"distance_km": 1.466,
"duree_s": 86.696,
"index_debut": 613,
"index_fin": 645,
"type": 23
},
{
"consigne": "Gardez la gauche pour rester sur Route de la Commune.",
"distance_km": 0.448,
"duree_s": 35.685,
"index_debut": 645,
"index_fin": 673,
"type": 24
},
{
"consigne": "Votre destination est sur la droite.",
"distance_km": 0.0,
"duree_s": 0.0,
"index_debut": 673,
"index_fin": 673,
"type": 5
}
],
"origine": {
"adresse": "1 Place Sainte-Opportune, 75001 Paris 1er Arrondissement",
"lat": 48.859709,
"lon": 2.346998,
"source": "address"
},
"resume": {
"bbox": {
"max_lat": 49.009305,
"max_lon": 2.550256,
"min_lat": 48.826572,
"min_lon": 2.344384
},
"distance_km": 33.191,
"duree_min": 31.9,
"duree_s": 1913.8,
"geometrie": {
"encodage": "polyline6",
"polyline": "o~ce|A}sfnC{UxT[t@I|@R`BPXnNlPzRvR\\^\\ZrArAcI`_@z@`@~@Z|Al@nHpCxLrE|Bz@jL~ElGvB~NpEjA^zGtDtHbEbDhBjNsx@|@cFpBiKRcA|@{Eh@eCbFi[`E}URkAPgAhBmKdBeK`B_JfD{QVyA`FsXzAkINw@`B{IvDsRTmAt@_Ep@qDxGyV^uAnA{EjRmr@lCyJZkARu@xAuGdDmN`@_BlBkGdFoQfBgGpMef@`GiIVq@bDeKfCiIR{@f@uBrA}Fv@sDvJg]n^snA^sAnAeElB{Gt@gC|GoU~C{LrReu@pAiF`R{u@n@iC`@eBhAcE~B}Ih@qBnRgt@t@mC~Q}t@pJk^zAcGlAgD^gAXq@^}@lHcQzIgMrAwAbCwBtEuC|DiAlBi@|c@o@r@A~ACtEMpC?nC?lIA~d@c@nBKhD]lD{@hFmCxCiC~EoIjEoHzRy\\dBuCbDwFha@mq@fZog@vBmDhPeX`BoCzBeD\\c@h@o@x@gA~BeCjTuSpFaG`FwDzWeU~NsPtGeI~QeUxD{EdLePvC_Fz]yi@hRq\\`EaI~@{B|BuFxAgFdBcK|@gJ~@qFlAqFbCqHdDyGxZod@r\\qf@da@wm@rg@ar@ffAsqApf@al@~p@{t@rH_JfIeJ~[mb@vYw_@bQeSn`@_]ja@{i@rpAycBvGgKnGkLvIgRdEqI~AsChBqCxs@oaAbYe`@tp@e|@f~@ooAvz@wlAdSgXzNwOdWmN~a@iWxBkAbSsM`HsHrQaTrGqKrF}LnBkE`^oh@hYab@pQmZ~BiDhDiYLcLOyJo@gGwA}HkEqNeIkW}Pwi@eT_v@oIk`@wAmWgC_]mBoSaCiRan@upEoDkVwDkS_FsSwFyRmGmQwJiUoZmh@sLgT{_@cp@s]ql@inAmkCuY{l@uRgd@yQon@g}@udDgJ{SsMaUeSyV{PkPcYuQwUqJuIeCgK}B_B[e]yIuoAmZwsAkVyKmB{K_B}E}@ua@sCwbAcEcoAkDec@mE{UkCoz@gKg[kDeVeDsRaC{|@qKkfCc[st@kLo\\eB{\\r@ac@fJkJfEoSbJea@hS_QbIyJtDsCnAiVjGuEdAi`@pGe@JmU\\}QAat@wD}}@iFgnAkE{k@Es~@|FomApKsT}Ao`A_@qf@s@oScAoHaC_LkFgJkIkJaQaIaT_Li`@eO{f@sDmQqCyQ}B{VmAaXOy^o@i_@eAw]}Eqg@wN{bA{BwHuJmr@wu@{yEcBkHqGg\\oMuc@gJoYiEoMeKiTaXeb@c]yc@yl@cs@cUmXes@ahAcY_h@wPg]mUaa@yPm]_b@i~@_Win@yRoh@q]m}@gv@wsBcGuPoqBuhFu[yu@eNa_@uPue@i`@skAwGcS_IkTgAmDe_AkvC{]adAeV_s@{qAo|D{p@qrByT}m@}GqSuDsK}Rqk@oVew@yGgXgHw_@}BuPoDab@{A}Xo@o`@D__@nAu_AJkEh@{XlCgsAx@qb@l@}`@\\wOl@yj@Ckp@cCkt@mEmc@{Hee@yG{XkJcZ}IcUqMyWai@_{@uVi_@mIqKaEcF_EcEmFqEyCaCyEsDmFsDuEiCuEgCuEoBuEuB}E}A_FsAaFeAcFcAsFy@eFa@_FWmFSaFBmFHcFN_Fd@mFn@cFv@gDr@kHdBsRjF}o@dOiU~DiJvAcLxAeo@`KgJiA_]lHi[lK{b@vRaXtN_R`LsiAlv@qh@x^w[tRui@xUcc@vM}GrD_E`AsItAuQdBqP|@mOf@wTImTaAmMaA_VmDq[gHe^qL{g@iWqr@q\\mU_ImK_Eyg@aPalCyq@}@We@MwBk@qt@_T{_@mOgIoDyWyO{PmMugA}|@{]kXea@eXqN_J}d@_ZiaAmg@g\\eOuYuLe]wLk[{KkIaCwY{GqZwGaU_F}f@eJagAcSuUsEwc@yI_fAmXgq@_TcwCoaAoR_Ged@{MiSmEkHkB}]gHgPwCka@aGw_@kDmg@uCq\\y@u_@`@yr@hAag@|Ayi@jD{y@`GqdBpN}\\dAsvA|JwSbBgs@fFs^hEeMhA{mAjQqKrBocAzS}aBxa@ctAdf@gWfImSxGud@`PeiCv~@}FhBkn@pSawDxrAkfA|[}RbGy{@rTmlA`Uer@rKinAdM_bAfGqQ\\{kAxDaa@@qf@aAkMMgKm@aXyAsYuAysAqJ_h@wI_@Keb@sJao@ySck@sXiYcQsUkScOqL{VuWsTwVc]mb@y_@kk@_RkXcYgd@c]_m@iy@utAeDyLiqEe}H{ImKwtAqaC_d@}w@eoAuuBgcAifBcj@kaAsVad@_EiLwxAogCa`AsbBkO}YsFuKiZcr@yS_h@gMo]eL{[uMu`@eBsKaDyJcUst@gSaj@gQua@iP{\\cYgh@yUi_@}Uc[qS}TqRcSuWeVoZqUqGmCwq@}i@}l@ag@unAecA{`@q[aXgVyX{Xc^s`@md@kf@eTwX_MuTeJiSk\\_w@sO}ZyVc]eQsQiWiVqg@{i@cHsGie@ec@qGuNwK}LgVmb@iQsd@cTyw@c[soAmOih@}Wow@mYot@sN{XiXib@g[ua@q^c`@qOaKuVaRkOoHaa@eOmG]uRgAsVxCa`@~Mkh@pTsQfH_kAvi@eKxDcPhDaRvByJNwHE{LgAiO_EaF_Cq@[_FeCsFkEiEcFaDqEgCuFsD_KsEuNgD}WuEmb@}Fck@wDoZu@eG{BaVcBgQc@_V_@qWRkTd@uQnAgXfDoa@vUyyAfDmTnE_UvHcXtHqQdKeVjIiPdDoIhCwGrFoP`EuN|BwNbAeJjAeK~@eXH_Zq@i[{@ub@_@iPWwJm@oU_C{hAeK{lFeEsmB_C}bAwC_yAwBsRaAeQ}A_N}A_IiA{F_AuDyBeEmAuAeBu@eCSsENmC`@qG|@uAPgKrA{LzCui@fR_CdBqElEgJzMeDtHg@bBs@zBm@pCqChSk@vMi@fQTtM",
"precision": 6
}
}
}
Comprendre la réponse
L'API /route/compute calcule un itinéraire routier entre deux bornes
(adresses libres ou coordonnées WGS84). Lorsqu'une borne est fournie en adresse,
elle est résolue via la même chaîne que /address/verify — Meilisearch +
déduplication parser — pour récupérer les coordonnées géographiques avant le calcul.
Le routage est exécuté par Valhalla sur les données OpenStreetMap France.
- Réponse principale — un résumé (
distance_km,duree_s,bbox), une géométrie polyline6 (à décoder côté client pour le tracé carto), et la liste détaillée des étapes (consigne en français, distance, durée, indices de segments dans la polyline). - Mode adresse vs coordonnées — l'adresse est résolue automatiquement (premier
doublon_certain ou doublon_probable) ; les coordonnées sont utilisées telles quelles.
Si une adresse n'est pas résolvable, l'API renvoie un
422. - Plan Business uniquement — pour les autres plans, l'API renvoie un
403. Cette démo utilise une clé Business pré-configurée. Vous pouvez aussi coller votre propre clé pour tester avec votre quota.
Cas d'usage : préparation de tournées commerciales, optimisation de livraison last-mile, calcul d'éligibilité géographique (« combien de temps pour vous livrer ? »), estimation de temps de trajet domicile-travail pour un calcul de prime, etc.