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.
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.
Ist das wie die data.frame
Objekte aus Karten?
Ja , es ist ähnlich, also können wir map2Spatial*
verwenden, um es zu konvertieren:
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:
Wenn Sie das Objekt SpatialLines
verwenden, wird der Code ein wenig kürzer. Dies ergibt die ersten 10 Zeilen in diesem Fall:
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.
Tags und Links r gis dictionary leaflet gtfs