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.862905, 2.288342
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.
-
Tournez à droite dans Avenue du Président Wilson.
-
Entrez dans Place d'Iéna et prenez la 4ème sortie dans Avenue d'Iéna.
-
Quittez le rond-point dans Avenue d'Iéna.
-
Entrez dans Place Charles de Gaulle et prenez la 7ème sortie dans Avenue de la Grande Armée.
-
Quittez le rond-point dans Avenue de la Grande Armée.
-
Tournez à droite vers A 1/A 13/Périphérique/Porte Maillot.
-
Serrez à gauche dans Voie BG/17.
-
Continuez tout droit pour prendre la bretelle vers A 1/A 1/Périphérique intérieur/Porte de Champerret.
-
Prenez la bretelle A 1 vers Lille/Charles de Gaulle/Saint-Denis.
-
Gardez la gauche pour prendre A1 vers Lille/Charles de Gaulle/Saint-Denis.
-
Prenez la sortie 6 vers Charles de Gaulle/Roissy-en-France/Z.A. Paris Nord 2/Goussainville.
-
Continuez vers Charles de Gaulle/Centre commercial régional.
-
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.863069- min_lon
2.281167- 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.",
"distance_km": 0.017,
"duree_s": 4.145,
"index_debut": 0,
"index_fin": 2,
"type": 3
},
{
"consigne": "Tournez \u00e0 droite dans Avenue du Pr\u00e9sident Wilson.",
"distance_km": 0.419,
"duree_s": 57.748,
"index_debut": 2,
"index_fin": 12,
"type": 10
},
{
"consigne": "Entrez dans Place d\u0027I\u00e9na et prenez la 4\u00e8me sortie dans Avenue d\u0027I\u00e9na.",
"distance_km": 0.067,
"duree_s": 10.312,
"index_debut": 12,
"index_fin": 22,
"type": 26
},
{
"consigne": "Quittez le rond-point dans Avenue d\u0027I\u00e9na.",
"distance_km": 0.947,
"duree_s": 116.818,
"index_debut": 22,
"index_fin": 56,
"type": 27
},
{
"consigne": "Entrez dans Place Charles de Gaulle et prenez la 7\u00e8me sortie dans Avenue de la Grande Arm\u00e9e.",
"distance_km": 0.285,
"duree_s": 35.998,
"index_debut": 56,
"index_fin": 90,
"type": 26
},
{
"consigne": "Quittez le rond-point dans Avenue de la Grande Arm\u00e9e.",
"distance_km": 1.067,
"duree_s": 95.755,
"index_debut": 90,
"index_fin": 158,
"type": 27
},
{
"consigne": "Tournez \u00e0 droite vers A 1/A 13/P\u00e9riph\u00e9rique/Porte Maillot.",
"distance_km": 0.096,
"duree_s": 13.777,
"index_debut": 158,
"index_fin": 166,
"type": 10
},
{
"consigne": "Serrez \u00e0 gauche dans Voie BG/17.",
"distance_km": 0.064,
"duree_s": 7.728,
"index_debut": 166,
"index_fin": 169,
"type": 16
},
{
"consigne": "Continuez tout droit pour prendre la bretelle vers A 1/A 1/P\u00e9riph\u00e9rique int\u00e9rieur/Porte de Champerret.",
"distance_km": 6.304,
"duree_s": 459.775,
"index_debut": 169,
"index_fin": 255,
"type": 17
},
{
"consigne": "Prenez la bretelle A 1 vers Lille/Charles de Gaulle/Saint-Denis.",
"distance_km": 0.145,
"duree_s": 10.461,
"index_debut": 255,
"index_fin": 259,
"type": 18
},
{
"consigne": "Gardez la gauche pour prendre A1 vers Lille/Charles de Gaulle/Saint-Denis.",
"distance_km": 15.61,
"duree_s": 581.065,
"index_debut": 259,
"index_fin": 458,
"type": 24
},
{
"consigne": "Prenez la sortie 6 vers Charles de Gaulle/Roissy-en-France/Z.A. Paris Nord 2/Goussainville.",
"distance_km": 1.34,
"duree_s": 53.652,
"index_debut": 458,
"index_fin": 480,
"type": 20
},
{
"consigne": "Continuez vers Charles de Gaulle/Centre commercial r\u00e9gional.",
"distance_km": 0.656,
"duree_s": 26.246,
"index_debut": 480,
"index_fin": 492,
"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": 492,
"index_fin": 505,
"type": 23
},
{
"consigne": "Gardez la gauche \u00e0 la fourche.",
"distance_km": 0.609,
"duree_s": 35.547,
"index_debut": 505,
"index_fin": 517,
"type": 24
},
{
"consigne": "Gardez la droite \u00e0 la fourche.",
"distance_km": 0.28,
"duree_s": 20.178,
"index_debut": 517,
"index_fin": 532,
"type": 23
},
{
"consigne": "Serrez \u00e0 droite dans Route de la Commune.",
"distance_km": 0.221,
"duree_s": 15.939,
"index_debut": 532,
"index_fin": 539,
"type": 9
},
{
"consigne": "Gardez la droite pour rester sur Route de la Commune.",
"distance_km": 1.466,
"duree_s": 86.696,
"index_debut": 539,
"index_fin": 571,
"type": 23
},
{
"consigne": "Gardez la gauche pour rester sur Route de la Commune.",
"distance_km": 0.448,
"duree_s": 35.685,
"index_debut": 571,
"index_fin": 599,
"type": 24
},
{
"consigne": "Votre destination est sur la droite.",
"distance_km": 0.0,
"duree_s": 0.0,
"index_debut": 599,
"index_fin": 599,
"type": 5
}
],
"origine": {
"adresse": "1 Place du Trocad\u00e9ro et du Onze Novembre, 75016 Paris 16e Arrondissement",
"lat": 48.862905,
"lon": 2.288342,
"source": "address"
},
"resume": {
"bbox": {
"max_lat": 49.009305,
"max_lon": 2.550256,
"min_lat": 48.863069,
"min_lon": 2.281167
},
"distance_km": 30.839,
"duree_min": 28.5,
"duree_s": 1708.587,
"geometrie": {
"encodage": "polyline6",
"polyline": "{tje|A}ytjCyA|CwBtEaBsJm_@iyBgA_G}AkJiG_^wXu_BgDcT_AmGMeAoEgRn@qB`@sDEyDm@kDqAkCiB}AwCa@wBn@mBbBy@hBkLyGoAm@yLaGakBk}@{DmBgCoAqL{HyN{IwJj@mO?u[@eEEkj@o@cEEeEPcMxAeOdBiW|BoFf@u_@fDcg@vEaJ|@eHx@wBVm@F}C^aAH}AHyAHkKh@sDZaAJ}@FuXpBa@eEg@wFo@eEeAqDqAcDmAcCkBsCmBeBkBaBsBcAmB}@mB_@cCQyDFaCXiCd@wBv@oDpBmEpGcCdGkB~Gs@bEaA|JQvG@hE`@pFf@bD|@|DnApEbBzCtArC~ApBlBnBjB`BuFnVeB`Ic@nB[vAmCtMuA`G_@dBiA~F]bBkAhFWfAMl@cHx[K`@Kh@_@bBcIv^}DrQ]zAo@xC]~AeAvEcEvRqFfVmAtF_Qlw@i@bCiAfF]bBgCtLI`@K`@oDdP]|Ao@vCyKfg@yGpZYlAgClLyBvJWpAwE|SqRh|@wB~JoBfJ]zAqApG{FlWwCbN_@hBiKvPcA`By@dCM^_@dByAzGaApE]zAS`A[vAkAnFi@bCgG~Xa]r|AWhAS|@s@nDeB|I}DcC_Ai@aC}AqHiFsCiBo@c@aDuBsNwJaWwF{Ew@kCa@kFqAwCc@eCm@}Bo@oN{DqLaE}EgBgF_Cq\\}PcRyJa\\qNyWkKyCwAkLwI}LuLoUmY_Xo_@oRm`@uNaXoU{d@cSg_@gYok@eb@uw@sDaHeuBk~D{CqG_DwHeFoM_GaQ}BsHmCsJiDaOoFwXuBgM_BgKoAkJyTcjBkFqVsLuj@mXyx@q[wz@{_@{t@{aA_jBkQg[{]io@yY_s@qQyb@_HoN}c@qz@op@{nAiCsE_Qg`@qJmYcFoPwMec@}b@k}AwXqaAc{@{aDiTwv@ki@chCgWwpAgIa_@{Lsl@iKii@oTmfAsEoVeDaTmD_[yCg\\}@wQm@im@QyQoD{`IyA_yB]ih@eCqaDsFeoKiDsjE[mh@]oj@iBwvCeDcrGYev@`@ab@~@kf@xEw`BhHcb@lBiMjCgT|Ksk@lCga@BsDAeDGmCK_COyBSkB[}Ba@aCi@aCq@cCw@{Be@gAa@{@y@{AeA_B{@gA{AwAuAcAaCkA}Bs@_Cg@iCi@mBEgBDmBRoBb@iBl@yDrAiKnCuDz@wHdA_N`B{I`@iNAmQp@qd@bBuL`@m}BxIgc@~AejHdVyyBtHmsIb[giAhDocClJsuCdKmJ\\ywAfFw[dAsGJeF@qEGwEQmIy@cDk@_FaAiEkA{FoBsF_CkEwBaGuDkBuAiBqA_CkByDiDwDuDaEwE_FsGmCaEmCeEmAqBuBiEkCuFqCkGiCeH_CcHyBuHoByH_BoHqBsKeDyT}Ly|@}CqUeEo^mCgToDyXoF_^aDiS{DuUyVgwAkCyNoDaSiSshAoJkl@}Iuf@eSqjAaRifA_EiUsNix@eLwp@_Ksl@qHid@wJgv@mN}mAuNuyAkFup@qDi[qHepAiBqa@aBy`@eBoh@qAqh@o@q\\g@s\\g@wc@m@cr@Ya^gAemAw@is@k@agAgAoaAiActAkAaqA[}d@{@}b@q@}`@UiR}C}y@wBkh@eCyg@qCmg@uBg[qCy_@_D{`@}E{i@aIsw@kFge@}Fsd@cKsu@qIgj@qW}jBudA{iHuLaz@_e@s_Ds@kN_XsiBqGwd@gRuoAqh@eoDowBelOgKcp@cJmn@aL{t@iLyr@aMur@iZmxAye@yqBkL_^gEyNoa@aoAad@imA}Uql@icAe_ComCkgGqa@k`Ayw@ufBaYwo@s[au@m^az@eq@u~A{_DohHiYso@on@awAmo@oyAmg@kjAmRae@mIyPoWwk@unA}pCsi@sjA_Uuc@sZkl@{s@woAa_Ck`EyIyM_wA_eCmfA_kB{Qc[k~@_`Biz@wvAmkGauKihA}mBm^qn@_zBwxDiaAgeB}iBo`Dku@iqAemAuvBsTa`@oCgNk\\mp@qe@s_AoOw^oJsZ_Lca@aMqe@oLuc@aLm[yOy]cRk[yVi]eVyU{SuQgHeJwq@}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.