Il existe des bibliothèques pour calculer les chemins les plus courts sur ces graphiques. comment font-ils ça? Plus précisément, comment chargent-ils la partie requise du graphique pour exécuter l'algorithme de Dijkstra?
Vous pouvez utiliser une base de données, un format de fichier personnalisé à lire à partir du disque et un paramètre en mémoire.
Mais d'après mon expérience, l'utilisation d'une base de données est environ 5 à 10 fois plus lente et beaucoup plus intense en mémoire que l'écriture de votre propre format de fichier basé sur un format de liste liée «simple».
La bonne chose est qu'il existe plusieurs frameworks logiciels utilisant OSM qui sont open source afin que vous puissiez regarder directement dans le code, par exemple voir ici . Dans le moteur de routage open source GraphHopper, il est très facile de passer d'un paramètre mappé en mémoire (sur disque) au paramètre en mémoire - les deux utilisant le même format. Le paramètre "mmap" permet même une utilisation sur des appareils mobiles à mémoire limitée et ce dernier fonctionne beaucoup plus rapidement si vous avez la RAM nécessaire, par exemple sur un serveur. Par exemple, pour un graphique mondial (> 100 millions de nœuds), vous avez alors besoin d'environ 8 à 10 Go de RAM, ainsi que beaucoup plus de RAM si vous souhaitez accélérer tout, par exemple avec les hiérarchies de contraction - environ 5 à 8 Go de plus pour chaque véhicule que vous voulez.
Le format est très simpliste et ne stocke essentiellement que les données dont vous avez besoin avec quelques astuces pour le rendre compact. En savoir plus ici . Avertissement: je suis l'auteur de GraphHopper.
Concernant les autres réponses:
L'algorithme de Dijkstras, s'il est applicable, est considéré comme non optimal pour ce problème
Le Dijkstra `` normal '' peut fonctionner très raisonnablement (<1s pour les requêtes à l'échelle nationale comme votre exemple de 3 millions de nœuds) et est optimal dans le `` sens théorique '' mais a besoin d'un peu de réglage pour accélérer dans les scénarios de production. Et des techniques comme les Hiérachies de Contraction en utilisent une modification bidirectionnelle et fonctionnent très bien.
les réseaux routiers sont hiérarchiques et plans.
les réseaux routiers sont hiérarchiques pour la voiture uniquement et non planaires (ponts, tunnels, ...)