🚇 Metro Travel

2024-03-01

Aujourd'hui, j'ai envie de tracer le chemin entre 2 stations, s'il existe. Par exemple, le joueur ajoute "Rome" qui

  • *est sur la ligne 2 ** et
  • *est adjacente ** à Place de Clichy Puis ajoute à un autre moment "Place de Clichy", qui est sur la ligne 13 et 2, alors j'ajoute le chemin entre les 2 stations.

Je stocke déjà toutes les stations ajoutées dans une Map, il reste alors au moment de l'ajout d'une nouvelle station de vérifier si elle n'est pas adjacente à une station déjà en place.

Voyons un peu les données :

  • Est-ce que les stations ont les lignes auxquelles elles appartiennent ?
  • Est-ce que les lignes ont quelque chose en commun avec ce qu'il y aurait dans les stations ?

Ah, mais je n'ai pas terminé l'extract des lignes.

J'y retourne. En regardant, il reste qu'à enregistrer, j'ai l'impression.

C'est bon, de retour sur le lien entre stations et lignes. J'ai l'impression que c'est le properties.@relations.ref qui pourrait fonctionner, mais il ne faut pas oublier que ce n'est pas harmonisé (par exemple la ligne 9 ne vient pas du même contributeur).

En vérifiant avec cette commande cela m'a l'air correct :

cat assets/export.geojson | jq '.features | map(select(.properties.railway == "stop" or (.properties.public_transport == "stop_position" and .properties["type:RATP"] == "metro")))' | rg -C 25 'Miromesnil'

Bon, par contre dans le merge des stations, je n'ai pas mergé les refs des lignes, je vais modifier le script.

Je modifie, le script et le lance

const currentCoordinates = s.geometry.coordinates;
const currentLine = s.properties['@relations'].at(0).reltags.ref;

if (stations.has(stationName)) {
  const station = stations.get(stationName);
  station.properties.coordinates.push(currentCoordinates);
  if (currentLine)
    station.properties.lines.add(currentLine);
}
else {
  s.properties.coordinates = [currentCoordinates];
  s.properties.lines = new Set();

  if (currentLine)
    s.properties.lines.add(currentLine);

  stations.set(stationName, s);
}

Hum, cela ne passe pas avec un console.log, je vois que la station Marcadet - Poissonniers, n'a pas de ref je peux me base sur quoi ? En enquêtant sur la station, je me rends compte que j'ai déjà les deux lignes qui m'intéressent, que le Point geojson qui n'a pas de relation est du "surplus". Je vais faire en sorte de ne rien faire si je ne l'ai pas en espérant que ça soit suffisant.