GraphHopper : routage open-source pour entreprise

Publié le • ≈ 15 min de lecture

1. Introduction & contexte

GraphHopper est un moteur de routage open-source basé sur les données d’OpenStreetMap (OSM). Lancé en 2012, il s’est rapidement imposé pour ses performances, sa flexibilité et son support multi-modal. Les entreprises l’utilisent pour :

  • Optimiser les itinéraires de véhicules (voiture, camion, vélo, piéton).
  • Planifier des tournées de livraison (Vehicle Routing Problem).
  • Intégrer un service de calcul de distance ou de temps de parcours dans une application web ou mobile.

Contrairement à des API cloud propriétaires (Google Directions API, Mapbox Directions), GraphHopper s’installe on-premise ou en container, garantissant la maîtrise totale des données et la liberté de configurer les profils et algorithmes.

2. Architecture & installation

L’architecture de GraphHopper se compose de deux parties :

  1. Data Preparation : on importe un extrait OSM (PBF) et on génère un graph routier prétraité (fichiers .gh).
  2. Engine : un serveur Java expose des endpoints REST pour le calcul d’itinéraires, matrix, géocodage (via Nominatim si intégré).

Installation minimale :

git clone https://github.com/graphhopper/graphhopper.git
cd graphhopper
./graphhopper.sh import your-region.osm.pbf

Ou en Docker :

docker run -d -p 8989:8989 \
  -v /data/graphhopper:/data \
  graphhopper/graphhopper \
  import /data/your-region.osm.pbf

Pour la production, on recommande Kubernetes avec un PVC pour stocker les données et un HorizontalPodAutoscaler sur le service API.

3. Profils de routage

GraphHopper gère par défaut plusieurs profils : car, bike, foot. Vous pouvez définir vos propres profils dans config.yml :

profiles:
  - name: car
    vehicle: car
    weighting: fastest
  - name: truck
    vehicle: car
    weighting: shortest
    turn_costs: true

Chaque profil spécifie :

  • vehicle : type de transport.
  • weighting : algorithme (fastest, shortest ou personnalisé).
  • turn_costs : activation des pénalités de virage.

Vous pouvez aussi ajouter des restrictions (hauteur de pont, accès privé) en ajustant les flags d’import.

4. API REST & commandes

GraphHopper expose un endpoint principal :

GET /route?point=48.8566,2.3522&point=48.8584,2.2945&profile=car

Paramètres clés :

  • point : coordonnées lat,lon.
  • profile : nom de profil.
  • locale : langue des instructions (fr, en).
  • calc_points : true/false pour la géométrie.

Réponse JSON :

{
  "paths":[
    {
      "distance": 1250.3,
      "time": 60000,
      "points": {...},
      "instructions": [...]
    }
  ]
}

Vous pouvez aussi utiliser la CLI Java pour importer, graphhopper.sh, et gérer le server via docker exec ou systemd.

5. Fonctionnalités avancées

GraphHopper propose :

  • Distance Matrix : calcul de matrices de distances ou temps (/matrix).
  • TSP & VRP : problème du voyageur de commerce et tournées de livraison (/optimization).
  • Map Matching : correction de traces GPS (/match).

Ces outils s’exécutent en batch ou via l’API, permettant des usages comme l’optimisation de flotte, l’analyse de proximité et l’amélioration de la précision des trajets enregistrés.

6. Performance & scalabilité

Pour atteindre des milliers de requêtes par seconde :

  • Activez le mode CH (Contraction Hierarchies) pour un routage ultra-rapide après un prétraitement plus long.
  • Déployez plusieurs instances derrière un load-balancer (NGINX, Traefik).
  • Monitorez avec Prometheus (metrics exposées) et Grafana (dashboards CPU, latence, QPS).

Le CH réduit le temps de calcul de plusieurs secondes à quelques millisecondes, idéal pour un usage en temps réel sur de gros volumes.

7. Usage mobile & offline

GraphHopper fournit un SDK Android Maps :

  • GraphHopper Android Maps SDK : intègre OSM, routage et géocodage offline.
  • MBTiles pour le fond de carte et regional graph pour le routage embarqué.

Vous pouvez distribuer une application offline sans jamais solliciter un serveur externe, idéal pour les forces terrain, la logistique ou le tourisme hors réseau.

8. Intégration front-end

GraphHopper propose un plugin pour Leaflet Routing Machine :

L.Routing.control({
  router: new L.Routing.GraphHopper('YOUR_API_KEY'),
  geocoder: L.Control.Geocoder.nominatim()
}).addTo(map);

Vous pouvez également consommer l’API REST directement dans un front React, Vue ou Angular, pour créer des interfaces de planification de route riches et interactives.

9. Cas d’usage

Quelques réalisations :

  • Logistique urbaine : optimisation de tournées de colis pour réduire 20 % du coût carburant.
  • Mobilité partagée : calcul de trajets multi-modal (bus, train, vélo) pour un opérateur de mobilité.
  • Analyse spatiale : génération de heatmaps de trafic et de zones isochrones pour une ville intelligente.

Ces projets ont mis en avant la flexibilité des profils et la capacité de GraphHopper à gérer des contraintes métiers très spécifiques.

10. Conclusion & suite

GraphHopper est un pilier des solutions de routage open-source. Combiné à OpenStreetMap pour les données et à OSRM pour des cas extrêmes de performance, il permet de bâtir un stack géospatial complet et souverain.

Pour démarrer :

  1. Importez votre extrait OSM et testez les profils par défaut.
  2. Activez CH et mesurez les gains de latence.
  3. Déployez en container et configurez un job CI/CD pour les mises à jour.

← Retour au dossier principal

← Retour à l’accueil