TMaps - API Cartographie Tunisie

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

POST 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

200 Tournée optimisée — l'ordre des waypoints a changé
{
"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

  • order est un tableau d’indices (zéro-indexés) qui décrit l’ordre optimisé dans lequel visiter les waypoints d’origine. Dans l’exemple : visitez d’abord waypoints[2], puis waypoints[0], puis waypoints[3], puis waypoints[1].
  • distance et duration sont les totaux pour la tournée complète (origine → tous les waypoints dans l’ordre optimisé → éventuelle destination ou retour).
  • legs dé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

StatutCause
400Body invalide, plus de 50 waypoints
401api_key manquant ou révoqué
403Domaine non autorisé
404Pas d’itinéraire calculable (au moins un waypoint hors couverture)

Voir Codes d’erreur pour la liste complète.