Ich versuche, eine Echtzeit-Autoüberwachung Anwendung mit Android zu bauen. Die Autos würden auf der Karte mit ihrer aktuellen Position erscheinen. Das Problem ist, dass die Aktualisierung der Position über das GPS langsam ist. Die vorgeschlagene Lösung besteht darin, die Interpolation zu verwenden und die fehlenden Koordinaten zu ermitteln, bis das GPS die Position aktualisiert. Alle vorgeschlagenen Lösungen, die ich gefunden habe, benötigen wir zwei GPS-Koordinatenpunkte, um zwischen ihnen zu interpolieren, aber da ich versuche, in der Echtzeit zu arbeiten, habe ich nur die anfänglichen GPS-Koordinaten, um sich zu addieren. Kann mir jemand helfen, wie ich das erreichen kann? Oder gibt es eine andere vorgeschlagene Methode, die ich verwenden könnte?Wie interpoliere ich die GPS-Messwerte in Echtzeit in Java
Antwort
Dazu müssen Sie die Durchschnittsgeschwindigkeit berechnen, mit der das Fahrzeug von den vorherigen zwei Positionen (Entfernung/Zeit, vorzugsweise Meter/s) ging. Daraus können Sie einen Vektor konstruieren und ihn zum aktuellsten Positionsvektor hinzufügen, indem Sie ihn jede Sekunde zwischen dem nächsten Update selbst multiplizieren. Einfache Pseudo-Code unten:
prevPos = vector
currentPos = vector
prevPosTime = time
currentPosTime = time
speed = ((currentPos - prevPos).magnitude)/(currentPosTime - prevPosTime)
waitingtime = 0
until currentPos change:
assumedLocation = currentPos + ((currentPos - prevPos).normalized * speed * waitingtime)
wait(1s)
waitingtime += 1
Ich weiß, es unglaublich grundlegende, aber ich hoffe, Sie erhalten den Kern, wo ich mit diesem gehe.
Bearbeiten - Einfach mehr Erklärung, was ich blabbering auf über
(currentPos - prevPos).normalized
dies ist die letzte bekannte Richtung des Fahrzeugs. Dies kann durch Multiplikation mit einem beliebigen Wert skaliert werden
(currentPos - prevPos).magnitude
Dies ist die letzte bekannte SPEED. Wir können den normalisierten Vektor dafür nicht verwenden, weil das Normalisieren jede Skalierung "entfernt". Wir berechnen im Grunde nur, wie groß der Vektor ist und das ist unsere Geschwindigkeit.
currentPos + ((currentPos - prevPos).normalized * speed * waitingtime)
Dies addiert den Vektor aus der aktuellen Position durch die Richtung multipliziert mit der Geschwindigkeit, die wiederum mit der Zeit seit der letzten Aktualisierung multipliziert wird. Sie erhalten eine Vorhersage, wo das Auto auf der vorherigen Geschwindigkeit und Fahrtrichtung basieren sollte
Vorgeschlagene Änderung: Wichtiger Hinweis, dies ist Vorhersage, keine Interpolation. Wir würden die Interpolation verwenden, wenn wir beide Werte kennen würden, aber da einer unbekannt ist, verwenden wir die Vorhersage.
Ich verstehe das bisher, aber was tun Du meinst normalisiert hier '(currentPos - prevPos) .normalized' – prog
Okay, also die normalisierte Version eines Vektors ist ein Vektor mit einer Magnitude von 1. Ich kann wie folgt berechnet werden (zuerst brauchen wir dann die Länge): 'length = sqrt (vector.x^2 + vector.y^2) '' normal = neuer Vektor (vector.x/length, vector.y/length) ' – Polymer
Video verlinkt falls Sie eine genauere Erklärung wünschen: https: // www.youtube.com/watch?v=7fn03DIW3Ak – Polymer
Polymer hat eine große Antwort mit linearer Vorhersage. Es gibt jedoch einige bessere Vorhersagemethoden, wenn Sie sie benötigen.
Was ich verwenden würde, ist Double Exponential Smoothing. Dies berücksichtigt nicht nur die vorherigen Positionen, sondern auch alle anderen Positionen.
Wenn Ihr GPS auch die Genauigkeit jeder Erkennung angeben kann, können Sie einen Kalman-Filter verwenden. Kein einfacher Filter, aber ein wirklich guter Filter.
- 1. Wie interpoliere ich eine Matrix in MATLAB?
- 2. Wie interpoliere ich variable Zeichenfolge in Mops?
- 3. In Bash, wie interpoliere ich $ (...) in einer Zeichenfolge?
- 4. 3D-Geometrie: Wie interpoliere ich eine Matrix
- 5. Wie interpoliere ich Stationsdaten mit Kriging in Python?
- 6. Wie interpoliere ich JS-Variablen in CSS-Klassen?
- 7. Wie interpoliere ich ein Perl-Hash-Element in einer Zeichenfolge?
- 8. Wie interpoliere ich ein Upsampling-Bild in Matlab?
- 9. Wer nutzt Java in Echtzeit?
- 10. Wie interpoliere Region auf Vektorplot?
- 11. Wie kann ich RecyclerView in Echtzeit aktualisieren?
- 12. Wie mache ich Echtzeit-Programmierung in Rust?
- 13. Wie kann ich Pexpect in Echtzeit analysieren?
- 14. Java-Klasse in eine verschachtelte Echtzeit-Datenbank
- 15. Erstellen eines Echtzeit-Collaboration-Editors in Java
- 16. Wie aktualisiere ich DataGrid Echtzeit in C#?
- 17. Wie zeige ich die Datenzählung in Echtzeit an?
- 18. Wie erreiche ich die Mikrofonpegel in Echtzeit mit Phonegap/Cordova?
- 19. Parsing großer Textdateien in Echtzeit (Java)
- 20. Echtzeit-Java-Diagramm/Diagrammbibliothek?
- 21. Wie die Progressbar Widget in Echtzeit verwenden
- 22. Java Echtzeit-Debugging (Gaming)
- 23. Java Socket vom Socket in Echtzeit gelesen
- 24. Wie interpoliere ich und erstelle bessere Konturkarten mit Matplotlib?
- 25. Wie interpoliere (lerp) binäre Eingabe in den Fernbereich?
- 26. Wie generiere ich einfache 2D-Grafiken in Echtzeit?
- 27. Hinzufügen von Werten in JTextFields in Echtzeit in Java GUI
- 28. Wie interpoliere ich einen Vektor mehr als hundert Knoten in Prozent in Matlab?
- 29. Wie kann ich Metazeichen entschlüsseln, wenn ich eine Variable in Perls Matchoperator interpoliere?
- 30. Wie kann ich Bild Opazität in Echtzeit in IOS
Ich bekomme es nicht, wenn es in Echtzeit ist, können Sie viele der vorherigen Positionen gespeichert haben? Vielleicht nicht für das erste Update, aber von da an .. – cYrixmorten
ja, aber ich kann nicht die nächste Position und interpolieren zwischen ihm und meiner aktuellen Position für eine reibungslose Animation auf der Karte @ cYrixmorten – prog