etalab / transport-site

Rendre disponible, valoriser et améliorer les données transports
https://transport.data.gouv.fr
190 stars 29 forks source link

[Bug] Conversion NeTEx Rennes Métropole #1864

Closed NicolasBerthelot closed 1 year ago

NicolasBerthelot commented 2 years ago

On nous rapporte de Rennes un problème de génération du fichier NeTEx :

Je vous contacte car la conversion GTFS en NeTEx ne semble pas complète et correcte sur nôtre GTFS du STAR actuel. Je constate que seule la ligne de métro est traitée. Par ailleurs, le XML sur les horaires présentent des sauts de lignes un peu étrange.

Le dataset en question : https://transport.data.gouv.fr/datasets/versions-des-horaires-theoriques-des-lignes-du-reseau-star-au-format-gtfs/

thbar commented 2 years ago

Ressources GTFS:

Ressources Netex:

thbar commented 2 years ago

Observations à partir du fichier GTFS_2020.2.0.1_20211025_20211107.zip et de sa conversion.

Contenu du fichier Netex:

$ unzip -l gtfs-2020.2.0.1-20211025-20211107.zip.netex.zip 
Archive:  gtfs-2020.2.0.1-20211025-20211107.zip.netex.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  10-16-2021 01:03   reseau_STAR_c4ca4238a0b923820dcc509a6f75849b/
    36761  10-16-2021 01:03   arrets.xml
     1432  10-16-2021 01:03   calendriers.xml
     1766  10-16-2021 01:03   lignes.xml
    28402  10-16-2021 01:03   correspondances.xml
  2096284  10-16-2021 01:03   reseau_STAR_c4ca4238a0b923820dcc509a6f75849b/offre_a_b8c37e33defde51cf91e1e03e51657da.xml
---------                     -------
  2164645                     6 files

On ne voit effectivement qu'une seule ligne apparaître dans le résultat:

$ xpath -e "//Line" lignes.xml
Found 1 nodes in lignes.xml:
-- NODE --
<Line id="FR:Line:1001:" version="any">
                            <Name>Rennes (J.F. Kennedy) &lt;> Rennes (La Poterie)</Name>
                            <TransportMode>metro</TransportMode>
                            <PublicCode>a</PublicCode>
                        </Line>

Il y a beaucoup d'autres lignes, et on remarque que c'est la ligne conservée en sortie est la dernière trouvée en entrée:

❯ cat routes.txt | { tee >(head -3 >&3; cat >/dev/null) | tail -3; } 3>&1
route_id,agency_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color,route_text_color,route_sort_order
"0001","1","C1","Cesson-Sévigné (Champs Blancs) <> Rennes  <> Chantepie (Rosa Parks)","CHRONOSTAR","3","","95C11E","1A171B","1001"
"0002","1","C2","Saint-Grégoire (Champ Daguet) <> Rennes (Haut Sancé)","CHRONOSTAR","3","","008BD2","FFFFFF","1002"
# SNIP
"0804","1","TTZ","Rennes <> Noyal-Châtillon-sur-Seiche (Touche Tizon)","Spéciale","3","","009C99","FFFFFF","3804"
"0806","1","E4","Bus de Stade : Rennes (Roazhon Park) <> Communes","Evènementiel","3","","","","1806"
"1001","1","a","Rennes (J.F. Kennedy) <> Rennes (La Poterie)","Métro","1","","EE1D23","FFFFFF","1"
thbar commented 2 years ago

Etape suivante: lancer https://github.com/CanalTP/transit_model en local et reproduire a minima.

Nous avons un contrat de maintenance avec Kisio pour cette partie, une fois l'erreur reproduite on pourra se rapprocher d'eux.

thbar commented 2 years ago

J'ai pu reproduire en local et j'ai été au débuggeur dans le code.

Je précise que je ne savais pas avec certitude au début si l'outil gérait plusieurs lignes ou pas.

Voici certains éléments à noter pour la suite:

  1. Effectivement, si je m'injecte dans le code à cet endroit:

https://github.com/CanalTP/transit_model/blob/4491b46061cd4356cb9e987642c94265bd50c322/gtfs2netexfr/src/main.rs#L119

et que je compte les logs affichés avec:

    for line in &model.lines {
        println!("There is one line after reading")
    }

je n'obtiens qu'une ligne.

  1. En remontant dans le code, j'ai vu ceci, qui fait un nettoyage des lignes pour ne garder que celles qui sont référencées (il faudra vérifier dans le détail la logique):

https://github.com/CanalTP/transit_model/blob/4491b46061cd4356cb9e987642c94265bd50c322/src/model.rs#L363-L380

  1. On peut avoir la trace à l'écran en lançant depuis le repo transit_model la commande suivante (avec en input le fichier GTFS dézippé, je l'ai mis comme ça de façon à pouvoir supprimer facilement des éléments dans les fichiers individuels):
RUST_LOG=debug cargo run --package gtfs2netexfr -- --input ~/git/transport/data/gtfs-unzipped --output here --participant transport

On verra alors l'explication qui est bien que les lignes sont toutes supprimées (sauf une):

Oct 28 16:47:02.084 DEBUG transit_model::model: Line with ID 0011 has been removed    
Oct 28 16:47:02.084 DEBUG transit_model::model: Line with ID 0012 has been removed    
Oct 28 16:47:02.084 DEBUG transit_model::model: Line with ID 0013 has been removed    
Oct 28 16:47:02.084 DEBUG transit_model::model: Line with ID 0014 has been removed  

La partie suivante de l'enquête consiste à voir quelle donnée manque, pour répondre au producteur de données (ou à constater un éventuel zèle du convertisseur, auquel cas on se rapprochera de l'équipe qui le maintient, pour l'instant je n'ai pas d'élément dans ce sens).

thbar commented 2 years ago

En remontant ici https://github.com/CanalTP/transit_model/blob/81255d8303adf3bd0d3c6ee2cde58f277d5f3f24/src/model.rs#L257 on voit que :

thbar commented 2 years ago

@fchabouis si tu as l'énergie de creuser à un moment avec un outil tiers, ça serait top (sinon je remonterai ça en base à un moment).

thbar commented 2 years ago

Non élucidé pour le moment.