Outils pour utilisateurs

Outils du site


nsi:tds:graphes:plus_court_chemin

Plus court chemin sur une carte

Problème posé

Vous disposez de données décrivant les routes du 13e arrondissement de Paris.

On souhaite se donner un point de départ, un point d'arrivée et calculer un plus court chemin respectant les routes indiquées dans les fichiers.

Bien qu'on se soit limité au 13e arrondissement, les données sont volumineuses : plus de 10 000 nœuds et autant d'arêtes entre ces nœuds.

Les données

Vous disposez de deux fichiers.

Nœuds

paris13.nodes.csv Résumé

idlatlng
048.82634562.3614982
148.8261852.3572626
248.82607492.3552177
348.82581232.3503781
448.82575482.3465866

Ce fichier donne des nœuds correspondant à des points sur la carte. Cette nœud sont identifié par un entier id.

arêtes

paris13.edges.csv Résumé

sourcedestlongueurtypevmaxdeuxsensnom
8366096.27tertiary300Rue Nationale
660940333.62tertiary300Rue Nationale
403366115.72tertiary300Rue Nationale
661124604.5tertiary300Rue Nationale
102312118.69secondary300Avenue des Gobelins

Il s'agit de routes.

  • source et dest correspondent à id dans l'autre fichier.
  • Les longueurs sont données en mètres.
  • deuxsens = 1 quand la voie est à double sens, 0 pour un sens unique.

À vous

Il faudra

  • lire le contenu des fichiers,
  • construire un graphe avec ces données,
  • demander à l'utilisateur un point de départ et un point d'arrivée,
  • chercher le plus court chemin entre ces deux points – algorithme de Dijkstra
  • Afficher ce chemin par exemple en donnant la liste des voies à emprunter, en précisant les distances.

Les fichiers que je donne sont réduits et simplifiés par exemple aux gros fichiers que l'on pourrait télécharger sur openstreetmap c'est d'ailleurs là que j'ai pris mes données. Vous ne pourrez donc pas indiquer les points de départ et d'arrivée comme vous le feriez sur une application comme GoogleMap. Une solution est de préciser une localisation GPS et de choisir le nœud le plus proche.

Pour cela, vous pouvez utiliser le calcul de distance en mètres entre deux points de latitude et longitude connues (en degrés):

$$distance = 111\,120 \cdot \sqrt{\left[(lng_1 - lng_2)\cdot\cos\left(\frac{lat_1 + lat_2}{360}\cdot\pi\right) \right]^2 + \left[lat_1 - lat_2\right]^2}$$

nsi/tds/graphes/plus_court_chemin.txt · Dernière modification : de goupillwiki