Wie erstellt man ein interaktives Diagramm von GTFS-Daten in R mit Leaflet?

8

Ich möchte eine interaktive Karte erstellen, die die öffentlichen Transportlinien einer Stadt zeigt. Ich versuche, dies mit Leaflet in R zu tun (aber ich bin offen für Alternativen, Vorschläge?)

Daten: Die Daten des Transportsystems sind im GTFS-Format, organisiert in Textdateien (.txt), die ich in R als Datenrahmen einlese. *

Das Problem: Ich kann nicht herausfinden, wie die ID jeder Poly-Linie (Variable shape_id) angegeben werden soll, damit die Zeichnung der Route jeder Transitlinie folgt. Stattdessen verbindet es die Punkte in einer zufälligen Reihenfolge.

Hier habe ich versucht, bisher ohne Erfolg:

%Vor%

Ich würde mich freuen, Ihre Kommentare dazu zu haben.

* Ich weiß, dass es möglich ist, diese Daten in eine GIS-Software (z. B. QGIS) zu importieren, um ein Shapefile zu erstellen, und dann das Shapefile mit readOGR in R einzulesen. Robin Lovelace hat gezeigt, wie man das macht . ABER, ich suche nach einer reinen R Lösung. ;)

ps. Kyle Walker hat ein interessantes Intro zu interaktiven Karten in R mit Leaflet geschrieben. Leider behandelt er Polylinien in seinem Tutorial nicht.

    
rafa.pereira 26.02.2015, 21:51
quelle

1 Antwort

9

Ihr Problem besteht nicht in der Methode, sondern in den Daten: Beachten Sie, dass Sie 8 MB herunterladen und dass die Zeile Datei, die Sie versuchen, über shiny in Leaflet zu laden, 5 MB beträgt. Grundsätzlich sollten Sie immer zuerst neue Methoden mit kleinen Datensätzen ausprobieren, bevor Sie sie skalieren. Dies ist, was ich unten mache, um das Problem zu diagnostizieren und zu lösen.

Schritt 1: Erforschen und unterteilen Sie die Daten

%Vor%

Schritt 2: In ein räumliches * Objekt

konvertieren

Ist das wie die data.frame Objekte aus Karten?

%Vor%

Ja , es ist ähnlich, also können wir map2Spatial* verwenden, um es zu konvertieren:

%Vor%

Schritt 3: Verbinden Sie alle Linien zusammen

Eine for Schleife wird das gut machen. Beachten Sie, dass wir nur die ersten 10 Zeilen verwenden. Verwende 2:length(ids) für alle Zeilen:

%Vor%

Stufe 4: Plot

Wenn Sie das Objekt SpatialLines verwenden, wird der Code ein wenig kürzer. Dies ergibt die ersten 10 Zeilen in diesem Fall:

%Vor%

Fazit

Sie mussten mit den Daten experimentieren und sie manipulieren, bevor Sie sie mit den richtigen IDs in einen Spatial * -Datentyp zum Plotten umwandelten. maptools::map2Spatial* , unique() und eine clevere for Schleife können das Problem lösen.

    
RobinLovelace 27.02.2015, 00:00
quelle

Tags und Links