Itinéraire optimisé
Optimisez l'ordre de visite d'une liste de points pour minimiser la distance totale ou la durée totale (problème du voyageur de commerce).
L’endpoint Optimized Routing réordonne une liste de points pour calculer la tournée optimale — typiquement l’ordre de livraison qui minimise la distance ou la durée totale. C’est une solution au problème du voyageur de commerce (TSP).
Endpoint
https://api.tmaps.tn/routing/optimized?api_key=YOUR_API_KEY Paramètres
Body JSON
| Param | Type | Requis | Défaut | Description |
|---|---|---|---|---|
origin | object | oui | — | Point de départ { lat, lng }. Reste fixe dans la tournée optimisée. |
waypoints | array | oui | — | Liste de points { lat, lng } à réordonner (max 50 waypoints). |
destination | object | — | — | Point d'arrivée fixe { lat, lng }. Si omis, la tournée se termine au dernier waypoint optimisé. |
profile | string | — | driving | Profil de transport : driving, walking, cycling, truck. |
optimize | string | — | duration | Critère d'optimisation : duration ou distance. |
roundtrip | boolean | — | false | Si true, la tournée revient au point de départ. |
geometry | string | — | polyline | Format de la géométrie de retour : polyline ou geojson. |
steps | boolean | — | false | Si true, renvoie les instructions turn-by-turn pour chaque leg. |
VRP avancé : roadmap
La version actuelle traite un TSP simple (un seul véhicule, sans contraintes). Les fenêtres temporelles (time windows), les capacités véhicule et la flotte multi-véhicules sont prévues dans une future version. Si vous avez besoin de ces fonctionnalités, contactez-nous.
Exemple — Tournée de livraison
curl -X POST "https://api.tmaps.tn/routing/optimized?api_key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"origin": { "lat": 36.8355, "lng": 10.2261 },
"waypoints": [
{ "lat": 36.8485, "lng": 10.1712 },
{ "lat": 36.8644, "lng": 10.1808 },
{ "lat": 36.8664, "lng": 10.1938 },
{ "lat": 36.8779, "lng": 10.2024 }
],
"profile": "driving",
"optimize": "duration",
"roundtrip": true
}'Réponse
{
"distance": 14820,
"duration": 1680,
"order": [2, 0, 3, 1],
"geometry": "ahvqEi}_iL...",
"legs": [
{
"from": { "lat": 36.8355, "lng": 10.2261 },
"to": { "lat": 36.8664, "lng": 10.1938 },
"distance": 3120,
"duration": 380
},
{
"from": { "lat": 36.8664, "lng": 10.1938 },
"to": { "lat": 36.8485, "lng": 10.1712 },
"distance": 2940,
"duration": 320
}
]
} Lecture de la réponse
orderest un tableau d’indices (zéro-indexés) qui décrit l’ordre optimisé dans lequel visiter leswaypointsd’origine. Dans l’exemple : visitez d’abordwaypoints[2], puiswaypoints[0], puiswaypoints[3], puiswaypoints[1].distanceetdurationsont les totaux pour la tournée complète (origine → tous les waypoints dans l’ordre optimisé → éventuelle destination ou retour).legsdétaille chaque segment dans l’ordre optimisé.
Ré-ordonner côté client
Pour afficher la tournée à un livreur, projetez order sur votre liste d’origine :
const sorted = order.map(i => waypoints[i]).
Cas d’usage
- Livraison express : minimiser la distance pour un livreur avec 10 colis.
- Tournées d’inspection : ordre optimal des sites à visiter par un agent terrain.
- Maintenance : tournées techniciens (réseau, équipement, etc.).
Limites
- Max 50 waypoints par requête. Pour les flottes plus larges, découpez en lots et appelez l’API plusieurs fois.
- Pas de fenêtres temporelles ni de capacités dans cette version (voir l’encart au-dessus).
Erreurs
| Statut | Cause |
|---|---|
400 | Body invalide, plus de 50 waypoints |
401 | api_key manquant ou révoqué |
403 | Domaine non autorisé |
404 | Pas d’itinéraire calculable (au moins un waypoint hors couverture) |
Voir Codes d’erreur pour la liste complète.