J'ai juste un problème de nombre de requêtes, que je ne peux pas éviter malheureusement, ou alors au détriement de cette précision ! J'explique : J'ai un trajet avec les villes, par lesquelles je passe, contenues dans un tableau que l'on va appeler "itinéraire". J'ai également une table dans ma BD qui contient deux à deux, des villes directement reliées par une route, on va l'appeler la table "ville proche". Lorsque je recherche la ville suivante à celle courante, j'ai le choix entre :

  • Vérifier si elle n'est pas dans la table ville proche avec comme binome la ville d'arrivée ou l'avant ville courante. J'évite ainsi les détours en forme de triangle (au lieu de faire A-B-C, on fait A-C direct) et ça évite aussi les énormes détours en forme de ce que vous voulez (au lieu de faire A-B-C-B-D-E-F-E-D-G... on fait A-G direct (si A et G sont effectivement ensemble dans la table "ville proche")!).
  • L'autre solution vérifie si la ville courante est dans la table proche avec l'une des villes du tableau itinéraire (je fais donc une boucle sur tout le tableau itinéraire en faisant une requête à chaque fois) sauf la dernière. Ceci permet une certitude quant au chemin le plus court.

Mais il y a un problème, et pour mieux le visualiser, voici un exemple : on veut aller de Limezel (près de Questembert) à Le Palais (sur Belle-Ile). On fera l'hypothèse que Le Palais et Quiberon sont relié par une route !

Avec la deuxième méthode, j'utilise 261 requêtes de type SELECT, avec la première méthode, j'en utilise 106 exactement ! 106 c'est déjà énorme, mais c'est le minimum requis je pense pour cet algorithme.

Je suis donc obligée de choisir la première méthode même si elle est moins efficace sur certains trajets. Je pense que je vais faire une parade en proposant à l'utilisateur de supprimer la ou les villes par lesquelles il ne passe même pas à proximité. Ainsi, je mettrai ces villes dans mon tableau "ville interdite" et je recommencerai l'algorithme.

Juste à titre indicatif, pour le trajet Questember-Limezel, mappy trouve une distance de 82,7 km et l'algorithme trouve 81,5 km ! Ce n'est qu'un exemple parmi d'autres mais quand même !

Demain, je continue de remplir ma base de donnée pour faire tout le morbihan et je commence à voir pour les restrictions d'ajout de trajet, de demande de trajet et de demande de partage de trajet.