Wie extrahiere ich einen kleinen Bereich aus einem großen GTFS-Feed?

11

Gibt es ein Tool, das das Extrahieren einer kleinen Region aus einem größeren GTFS-Feed unterstützt? Die Transitfeed-Bibliothek von Google enthält ein Merge-Tool, aber meines Erachtens kein Extract / Clip-Tool. Andere Bibliotheken, die ich gefunden habe, können nur Daten lesen und zeichnen, unterstützen jedoch keine Manipulation.

Hintergrundinfo: Der Transitfeed Feedvalidator zeigt viele Fehler für meine GTFS-Datei an. Ich möchte meine Region von Interesse extrahieren, um die lokale Qualität zu bewerten.


Empfehlungen auf Twitter haben mich auf FME hingewiesen, das sowohl einen GTFS-Leser als auch einen Schreiber hat. Mein einfacher Workflow besteht aus einem GTFS-Reader (unten links), einem Shapefile-Reader (oben links für das Polygon des interessierenden Bereichs), einem Clipper und einem GTFS-Writer für die Ausgabe (nur das Schreiben der Stopps und Shapes-Dateien, aber schließlich ich ' Ich möchte alle Dateien):

Geben Sie hier die Bildbeschreibung ein

Bisher besteht das Problem darin, dass der Inhalt der Ausgabeformen (orangefarbene Punkte) nicht alle Eingabepunkte (grün) enthält, die sich innerhalb des interessierenden gelben Bereichs befinden:

Geben Sie hier die Bildbeschreibung ein

(Datenquelle: https://transitfeeds.com/p/helsinki-regional-transport/735/latest/download )


Bei Verwendung von "Aggregate erstellen" = "Nein" scheinen die abgeschnittenen Formen vollständig zu sein

Geben Sie hier die Bildbeschreibung ein

aber die Haltestellen sind definitiv nicht

Geben Sie hier die Bildbeschreibung ein

Unterdunkel
quelle
Ist es möglich, die Formdatei und den Arbeitsbereich, die Sie im obigen Beispiel verwendet haben, gemeinsam zu nutzen? Mir ist klar, dass Sie die GTFS-Daten selbst nicht freigeben können.
Ken Bragg
Die roten Zahlen im Arbeitsbereich zeigen Funktionen an, die nicht abgeschnitten werden konnten. Ein Doppelklick darauf öffnet sie im Dateninspektor, sodass Sie sehen können, was sie sind. Ich vermute, es handelt sich um Features ohne Geometrie.
Ken Bragg
Ja, das sind alle Features aus den Nicht-Geometrie-Dateien, soweit ich das beurteilen kann.
Underdark

Antworten:

6

Dies sollte in FME 2016 möglich sein. Da wir keine Aggregate in GTFS schreiben können, ist eine Einstellung im Clipper erforderlich. "Create Aggregates" = "No", um zu verhindern, dass FME Aggregate erstellt, wenn das abgeschnittene Feature zu mehreren Teilen führt. Der Arbeitsbereich, mit dem ich getestet habe, ist hier: https://www.dropbox.com/s/b02hd7shefybtmw/gtfs2gtfs.fmw?dl=0 Basierend auf den Helsinki-Beispieldaten hier: https://t.co/wAZHmUS5HN Geben Sie hier die Bildbeschreibung ein

Ken Bragg
quelle
Danke, das muss ich im Büro nochmal versuchen. Übrigens, gibt es genug "schwarze Magie" / Logik, um auch die GTFS-Dateien, die keine eigenen Koordinaten enthalten (z. B. Routen.txt und Trips.txt), beschneiden zu lassen?
Underdark
Sie können die nicht-räumlichen Datenattribute mit einem Featuremerger oder Joiner mit der offiziellen Referenz Developers.google.com/transit/gtfs/reference verbinden, aber nicht alle Helsinki-Daten werden ausgefüllt, sodass Joins nicht vollständig funktionieren.
Mapperz
Ja, wie @Mapperz hervorhebt, müssen wir den FeatureMerger-Transformator verwenden, um die abgeschnittenen Geometrien mit nicht räumlichen Features zu verbinden. Zum Beispiel können Reisen gefunden werden, indem der FeatureMerger verwendet wird, um sich auf shape_id anzumelden, und dann können Kalenderdatensätze gefunden werden, indem sie mit trip auf service_id zusammengeführt werden. Ich habe hier angefangen, das durchzuarbeiten
Ken Bragg
1
Ich sehe das Problem und denke, die Lösung ;-) Das Attribut parent_station an den Stopps in den Helsinki-Beispieldaten enthält einige Leerzeichen (wie in der Spezifikation zulässig), aber es scheint sich um Leerzeichen zu handeln, sodass FME sie nicht schreibt, weil sie dies nicht tun Erfüllt nicht den von FME definierten Datentyp. Wir erzwingen eine Ganzzahl oder Null. Sie können dies mithilfe des AttributeManager-Transformators beheben, um das Attribut auf null zu setzen, wenn es keine Ganzzahl ist. Siehe Screenshot hier: screencast.com/t/dvsWfoYe
Ken Bragg
2
Wenn dies nicht hilft, arbeiten wir gerne über den Safe Software-Support ( safe.com/support ) enger mit Ihnen zusammen. Wenn wir alles gelöst haben, können wir hier eine Zusammenfassung veröffentlichen. Oder fahren Sie hier fort, wenn Sie es vorziehen.
Ken Bragg
5

Wenn Sie die Routen kennen, die sich in Ihrer interessantesten Region befinden, kann Ihnen der GTFS Transformer ein viel kleineres GTFS geben.

Auf diese Weise werden alle Fahrten, Formen, Stopps, Stoppzeiten und Kalender entfernt, die nicht in den beibehaltenen Routen enthalten sind.

Wenn Sie route_id 1 entfernen und route_id 3 beibehalten möchten, sieht Ihre Transformationsdatei folgendermaßen aus:

{"op":"retain","match":{"file":"routes.txt","route_id":"1"}}
{"op":"remove","match":{"file":"routes.txt","route_id":"3"}}
Tony Laidig
quelle
1
Dies ist zwar nicht ideal, könnte aber die beste verfügbare Lösung sein. Basierend auf der Beschreibung gehe ich davon aus, dass der Transformer auch alle zugehörigen Dateien filtert, um nur Informationen zu den beibehaltenen Routen zu enthalten.
Underdark