Ich habe einen Geopandas-Datenrahmen aus einer Reihe von Linestrings, denen einige Daten mit jedem Scheitelpunkt / Punkt zugeordnet sind:
Point_x = (Lat, Lon, Time, ID, Data1, Data2, Data3)
Die Punkte werden basierend auf der ID in Linestrings konvertiert und nach Zeit sortiert.
Ich möchte die Linestrings an dem Punkt brechen, an dem eine Bedingung erfüllt ist. Im Moment ist der Abstand zwischen den Punkten größer als ein Wert. In Zukunft könnte es sein, dass eine Funktion der Datenfelder einen Wert hat. Teilen Sie zum Beispiel einen Linestring, wenn die Geschwindigkeit 5 km / h überschreitet.
Das aktuelle Problem ist, dass einige der Spuren aus Punkten mit doppelten IDs gebildet werden, sodass der Linestring über große Entfernungen hin und her springt und ich möchte, dass ein Schwellenwert diese Linien durchbricht.
Irgendwelche Ideen zur richtigen Strukturierung dieser oder Bibliotheken / Methoden, die von Nutzen sein könnten?
Der Datenrahmen enthält über 150.000 Spuren mit vielen Punkten pro Spur, sodass die Effizienz gut wäre.
Hier ist ein Beispiel für die Tracks DF:
ID geometry
204235000 LINESTRING (37.62001 -28.99535, 37.62015 -28.9...
205400000 LINESTRING (3.807816666666666 -18.083181666666...
207138000 LINESTRING (22.73206 -34.97915833333333, 22.73...
209016000 LINESTRING (8.447673333333331 -23.522783333333...
Hier ist ein Beispiel aus den Punkten DF. Es gibt 18 Spalten, einschließlich Datetime, Punkt (Lon, Lat), Geschwindigkeit, Größe usw. usw.:
Index Heading Latitude Longitude ID
20 92.8 -35.946802 13.089695 210725000
21 93.5 -35.946912 13.091808 210725000
22 95.4 -35.965520 13.497698 210725000
23 94.7 -35.965803 13.501898 210725000
24 94.9 -35.965987 13.504573 210725000
EDIT: Versucht, ein wenig klarer zu sein.
gd.head()
wäre willkommen.Antworten:
Ich habe Shapely / Geopandas noch nicht verwendet, daher kann ich nur Pseudocode bereitstellen:
Die Distanzfunktion sollte etwas sein, das Ihre Bibliotheken bereits anbieten, oder Sie müssen sie selbst implementieren (der alte Kumpel Pythagoras wird Ihnen helfen).
Von dort aus kann die Effizienz nach Bedarf verbessert werden, dies sollte jedoch ein guter Ausgangspunkt sein.
quelle