Comment extraire une petite zone d'un gros flux GTFS?

11

Existe-t-il un outil qui prend en charge l'extraction d'une petite région à partir d'un plus grand flux GTFS? La bibliothèque Transitfeed de Google contient un outil de fusion, mais aucun outil d'extraction / clip, pour autant que je puisse voir. Les autres bibliothèques que j'ai trouvées peuvent uniquement lire et tracer des données mais ne prennent pas en charge la manipulation.

Informations générales: le Transitfeed Feedvalidator affiche de nombreuses erreurs pour mon fichier GTFS. Je souhaite extraire ma région d'intérêt pour évaluer la qualité locale.


Les recommandations sur Twitter m'ont montré FME qui a à la fois un lecteur GTFS et un écrivain. Mon flux de travail simple se compose d'un lecteur GTFS (en bas à gauche), d'un lecteur de fichiers de formes (en haut à gauche, pour le polygone de la zone d'intérêt), d'un clipper et d'un écrivain GTFS pour la sortie (écrivant uniquement les fichiers d'arrêts et de formes pour le moment mais finalement je '' Je veux tous les fichiers):

entrez la description de l'image ici

Le problème jusqu'à présent est que le contenu des formes en sortie (points orange) ne contient pas tous les points d'entrée (verts) qui se trouvent dans la zone d'intérêt jaune:

entrez la description de l'image ici

(Source de données: https://transitfeeds.com/p/helsinki-regional-transport/735/latest/download )


En utilisant "Créer des agrégats" = "Non", les formes écrêtées semblent complètes

entrez la description de l'image ici

mais les arrêts ne sont définitivement pas

entrez la description de l'image ici

obscur
la source
Est-il possible de partager le fichier de forme et l'espace de travail que vous avez utilisé dans l'exemple ci-dessus? Je me rends compte que vous ne pouvez pas partager les données GTFS elles-mêmes.
Ken Bragg
Les nombres rouges dans l'espace de travail indiquent des fonctionnalités qui n'ont pas pu être découpées. Double-cliquez dessus pour les ouvrir dans l'inspecteur de données afin que vous puissiez voir ce qu'elles sont. Je suppose que ce sont des fonctionnalités sans géométrie.
Ken Bragg
Oui, ce sont toutes les fonctionnalités des fichiers non géométriques, pour autant que je sache.
underdark

Réponses:

6

Cela devrait être possible dans FME 2016. Étant donné que nous ne pouvons pas écrire d'agrégats dans GTFS, un paramètre dans le Clipper est nécessaire "Créer des agrégats" = "Non" pour empêcher FME de créer des agrégats lorsque la fonction découpée entraîne plusieurs morceaux. L'espace de travail avec lequel j'ai testé est ici: https://www.dropbox.com/s/b02hd7shefybtmw/gtfs2gtfs.fmw?dl=0 Basé sur les données d'exemple d'Helsinki ici: https://t.co/wAZHmUS5HN entrez la description de l'image ici

Ken Bragg
la source
Merci, je vais devoir réessayer au bureau. Au fait, y a-t-il suffisamment de "magie noire" / logique pour que les fichiers GTFS qui ne contiennent pas de coordonnées par eux-mêmes (par exemple routes.txt et trips.txt) soient coupés?
underdark
Vous pouvez joindre les attributs de données non spatiales avec un featuremerger ou un menuisier avec la référence officielle developers.google.com/transit/gtfs/reference mais toutes les données d'Helsinki ne sont pas remplies, les jointures ne fonctionneront donc pas entièrement.
Mapperz
Oui, comme le souligne @Mapperz, nous devons utiliser le transformateur FeatureMerger pour joindre les géométries écrêtées à des entités non spatiales. Par exemple, les trajets peuvent être trouvés en utilisant FeatureMerger pour se joindre sur shap_id, puis les enregistrements de calendrier peuvent être trouvés en fusionnant avec trip on service_id. J'ai commencé à travailler ici: dropbox.com/s/b02hd7shefybtmw/gtfs2gtfs.fmw?dl=0
Ken Bragg
1
Je vois le problème et je pense que la solution ;-) L'attribut parent_station sur les arrêts dans les données d'exemple d'Helsinki a quelques blancs (comme autorisé dans la spécification) mais ils semblent être des caractères d'espaces blancs donc FME ne les écrit pas parce qu'ils ne ne répondent pas au type de données défini par FME. Nous appliquons entier ou nul. Vous pouvez résoudre ce problème à l'aide du transformateur AttributeManager pour définir l'attribut sur null s'il ne s'agit pas d'un entier. Voir la capture d'écran ici: screencast.com/t/dvsWfoYe
Ken Bragg
2
Si ce qui précède ne vous aide pas, nous serions heureux de travailler plus étroitement avec vous via le support Safe Software ( safe.com/support ) et nous pouvons publier un résumé ici lorsque nous avons tout résolu. Ou continuez ici si vous préférez.
Ken Bragg
5

Si vous connaissez les itinéraires qui se trouvent dans votre région la plus intéressante, le GTFS Transformer peut vous donner un GTFS beaucoup plus petit.

Ce faisant, il supprimera tous les trajets, formes, arrêts, stop_times et calendriers qui ne sont pas inclus dans les itinéraires retenus.

Si vous souhaitez supprimer route_id 1 et conserver route_id 3, votre fichier de transformation ressemblerait à quelque chose comme:

{"op":"retain","match":{"file":"routes.txt","route_id":"1"}}
{"op":"remove","match":{"file":"routes.txt","route_id":"3"}}
Tony Laidig
la source
1
Bien que ce ne soit pas idéal, cela pourrait finir par être la meilleure solution disponible. Sur la base de la description, je suppose que le Transformer filtre également tous les fichiers associés pour ne contenir que des informations sur les itinéraires retenus.
underdark
1

Je suis juste tombé sur twalcari / gtfs-filter , un bel utilitaire pour filtrer GTFS en délimitant la boîte, le temps et / ou les modes de voyage (classiques).

Holger Bruch
la source