Calcul d'itinéraire — Démo interactive
Calculez la distance et la durée routière entre deux points français — adresse libre
(résolue via la chaîne /address/verify) ou couple lat/lon WGS84.
Plan Growth : métriques distance + durée. Plan Business :
carte interactive et étapes turn-by-turn. Routage Valhalla sur les données
OpenStreetMap France.
Voir le résultat en plan :
Plan Growth : distance et durée routière entre deux points (endpoint
/route/summary). Carte et étapes turn-by-turn non incluses.
Plan Business : itinéraire complet avec carte interactive et étapes
turn-by-turn (endpoint /route/compute).
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
Deux endpoints, deux plans, un même calcul de routage Valhalla sur les données
OpenStreetMap France. Lorsqu'une borne est fournie en adresse,
elle est résolue via la même chaîne que /address/verify pour récupérer
les coordonnées géographiques avant le calcul.
- Plan Growth —
/route/summary: distance et durée routière (distance_km,duree_s,duree_min) entre deux points. Pas de géométrie ni d'instructions turn-by-turn — réponse compacte, idéale pour qualifier rapidement un prospect (« est-il à moins de 30 min de mon magasin / agence / dépôt ? est-il dans ma zone de chalandise ? »). - Plan Business —
/route/compute: le même résumé, plus une polyline6 (à décoder côté client pour le tracé carto) et la liste des étapes (consigne en français, distance, durée, indices de segments dans la polyline). Indispensable pour afficher l'itinéraire à un utilisateur final ou guider un commercial sur le terrain. - 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.
Cas d'usage Growth : scoring de prospect par distance à un point de vente, filtrage géographique d'une base CRM, contrôle d'éligibilité d'une zone de livraison, calcul d'indemnité kilométrique. Cas d'usage Business : préparation de tournée commerciale, navigation embarquée, restitution carto à un utilisateur final.