Simulation von Bewegungen auf einer Maproute

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Fluffing.

    Simulation von Bewegungen auf einer Maproute

    Hallo,

    für eine privates Projekt suche ich eine Möglichkeit das Abfahren einer Navi-Route zu simulieren. Im Netz gibt es da leider nur weniger Themen zu, die aber keinen genauen weg aufzeigen.
    Ziel soll es sein, dass quasi der aktuelle Standort unter Bewegung immer abgerufen werden kann. Das Fahrzeug hat dabei eine konstante Geschwindigkeit.

    Die Route wird mir auf einer Karte bereits angezeigt und die benötigte Zeit kann ich auch auslesen. Wie bekommt man es aber hin, dass man sagt, dass das Fahrzeug quasi fahren soll? Ein 500m Abstand würde mir da schon reichen. Da habe ich leider keine Ahnung von.

    Kann mir da vielleicht jemand helfen, wie ich sowas realisieren kann?
    @Fluffing Wie sehen denn die Daten der Route aus?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Fluffing schrieb:

    Dies lasse ich mir dabei dann als XML ausgeben
    Poste mal ein Stück XML.
    Das dort ist JSon.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    XML-Quellcode

    1. <route>
    2. <sessionId>621a4745-0044-993a-02b4-383b-0a449f443583</sessionId>
    3. "); vertical-align: bottom; height: 10px;"><options>
    4. <shapeFormat>raw</shapeFormat>
    5. <generalize>-1.0</generalize>
    6. <maxLinkId>0</maxLinkId>
    7. <narrativeType>text</narrativeType>
    8. <stateBoundaryDisplay>true</stateBoundaryDisplay>
    9. <countryBoundaryDisplay>true</countryBoundaryDisplay>
    10. <sideOfStreetDisplay>true</sideOfStreetDisplay>
    11. <destinationManeuverDisplay>true</destinationManeuverDisplay>
    12. <avoidTimedConditions>false</avoidTimedConditions>
    13. <enhancedNarrative>false</enhancedNarrative>
    14. <returnLinkDirections>false</returnLinkDirections>
    15. <timeType>0</timeType>
    16. <routeType>FASTEST</routeType>
    17. <locale>en_US</locale>
    18. <unit>M</unit>
    19. <tryAvoidLinkIds/>
    20. <mustAvoidLinkIds/>
    21. <manmaps>true</manmaps>
    22. <drivingStyle>2</drivingStyle>
    23. <highwayEfficiency>22.0</highwayEfficiency>
    24. <useTraffic>false</useTraffic>
    25. </options>
    26. "); vertical-align: bottom; height: 10px;"><boundingBox>
    27. "); vertical-align: bottom; height: 10px;"><ul>
    28. <lat>53.555557</lat>
    29. <lng>9.988864</lng>
    30. </ul>
    31. "); vertical-align: bottom; height: 10px;"><lr>
    32. <lat>53.550163</lat>
    33. <lng>10.006132</lng>
    34. </lr>
    35. </boundingBox>
    36. <distance>1.252</distance>
    37. <time>224</time>
    38. <realTime>-1</realTime>
    39. <fuelUsed>0.08</fuelUsed>
    40. <formattedTime>00:03:44</formattedTime>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fluffing“ ()

    @Fluffing Völlig neuer Sachverhalt:
    Wie lese ich eine solche XML-Datei aus?
    Wenn das geklärt ist, reden wir weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Auslesen kann ich die ja bereits. Z.B. benutze ich die Werte aus "distance" und "time" bereits für mein Programm.
    Ich stelle dafür ein webRequest und schreibe die Antwort in ein XmlDocument. Dieses durchsuche ich dann je nach benötigtem SingleNode.
    wenn ich dich recht verstehe, dann möchtest du ein Objekt (Auto zB) auf einer Karte anzeigen lassen und dieses soll alle paar (Milli/Mikro/Nano)Sekunden die Position ändern, also quasi simulieren, wo es gewesen ist? Wenn das zutrifft, dann erstmal eine generelle Frage: was hindert dich?

    Ja, ich gebe zu, die Frage klingt erstmal total protzig und abgehoben. Aber auf den zweiten Blick, könntest du von selbst drauf kommen.

    Als Ansatz: Wenn du früher in der Schule Themen wie "lineare Algebra" hattest, hast du solch ein Gebilde schon durchgenommen. Noch genauer wird das ganze, wenn ich auf die Physik verweise mit "Geschwindigkeit = Strecke / Zeiteinheit". Nun bringe ich noch das Stichwort "Vektor". Nun müsste der Groschen fallen.

    Falls immer noch nicht:
    In der Physik hat man oft Rechnungen gemacht wie: Auto A fährt aus ADorf los Richtung BDorf mit einer Geschwindigkeit von v1, Auto B fährt aus BDorf los mit Geschwindigkeit von v2 und in Richtung von ADorf. Frage: An welcher Stelle fahren sie aneinander vorbei= Frage zwei: zu welchem Zeitpunkt passiert das? (Hierzu sei angenommen, dass die Straße von ADorf nach BDorf eine Gerade sei und es nur diese eine Straße gibt.

    In dieser Aufgabe steckt drin, dass A sich am Ort ADorf aufhält. Hier legen wir unser kartesisches Koordinatensystem auf den Punkt (0/0). Nun fährt A mit v1 los. B hingegen befindet sich bei BDorf. Dieses liegt weiter weg im KK und fährt mit v2, etc.
    Man geht an diese Lösung ran, indem man eine lineare Gleichung aufstellt für A und auch für B. v = s/t. Wir wissen, dass sie sich treffen, wenn sie aneinander vorbeifahren, das heißt, wir wissen, dass das s in beiden Stellen gleich sein muss. Es bleibt: v1 = s/t1 und v2 = s/t2. Man stellt Formeln um und setzt ein und Voliá man kommt auf das gesuchte Ergebnis.
    Ja, das hat vordergründig nichts mit deinem Problem zu tun, aber der Ansatz ist entscheidend.

    Um noch mehr Text zu schreiben (vielleicht weißt du ja schon, was ich meine): Die Antwort liegt wahrscheinlich darin, dass du ebenfalls ein kartesisches Koordinatensystem brauchen könntest und den Nullpunkt an eine entsprechende Stelle platzierst. Anbieten würde sich der Nullpunkt (0/0) irgendwie bei dem ersten Punkt deiner Daten, die du aufgenommen hast.
    Ein KK hat immer x und y-Achsen sowie Punkte immer einen x- und y- Wert. Findest du bei dir etwas, das dem entspricht? Im Übrigen darfst du die Skaleneinteilung entsprechend bestimmen, wie du möchtest. Sinnvoll sollten sie jedoch sein.

    Nächste Idee: deine Daten beinhalten Dinge wie: Distance, Time, Latitude und Longitude. Kann man das irgendwie auf ein Koordinatensystem abbilden?

    Es soll simuliert werden. Nun dazu böte sich an, dass man einen Timer verwendet und in jedem Tick das Auto auf einen anderen Punkt seines eigenen KK setzt. Hierzu braucht man wieder v= s/t, wobei die Geschwindigkeit eine Durchschnittsgeschwindigkeit für jede Strecke von Punkt(n) zu Punkt(n+1) darstellt. Hier bietet sich LERP an (Lineare Interpolation), damit man immer wieder gleiche Teile einer Strecke abbildet (dann braucht man keine akkurate Zeit) oder man setzt auf eine akkurate Zeiteinteilung und nutzt diese Einteilung zum Fortbewegen des Autos auf dem KK.

    Also zum Zeitpunkt t0 ist das Auto exakt bei P(0/0), welches einer entsprechenden Longitdue und Atitude entspricht. Geht man nun davon aus, dass ein Tick im Timer nun 1Sekunde entspricht, kann man davon ausgehen, dass sich das Auto nun nach der Gleichung s = v * t bewegt hat, wobei v ja der Durchschnitt ist und t eben 1 Sekunde. Die Richtung, die dein Auto weiter muss, bestimmst du mittels Vektor, wobei gilt: Vektor AB-> setzt sich zusammen aus dem Vektor b-> minus dem Vektor a->. Das wäre die Richtung. anders ausgedrückt: y = m*t + b. Und damit sollte das eigentlich kein Problem mehr darstellen, entsprechende Berechnungen anzustellen :)

    Einzig entscheiden wird hier sein, die Proportionen und Einteilungen durchzuführen. Meine ich jedenfalls

    Fluffing schrieb:

    Die Route wird mir auf einer Karte bereits angezeigt und die benötigte Zeit kann ich auch auslesen. Wie bekommt man es aber hin, dass man sagt, dass das Fahrzeug quasi fahren soll?
    IMO hängt alles davon ab, wie die Karte, und darin die Route angezeigt werden.
    Das ist einerseits irre kompliziert, und andererseits gibts wohl 1000e verschiedene Möglichkeiten.

    Ich weiss nicht, ob der Link, den du gegeben hast, ob der die eine Möglichkeit, die bei dir implementiert ist, quell-offen und genügend detailliert dokumentiert.
    Und dann müsste jemand sich noch genügend hervorragend damit auskennen, mit dieser einen Darstellungs-Variante, um sie erfolgreich dahingehend erweitern zu können, dass ein Auto (was ja auch noch erstmal irgendwie darzustellen wäre) diese Route abfährt.

    Also ich kanns nicht, und bin skeptisch, dass sich irgendwer findet, der das kann.
    @PadreSperanza Ich verstehe deine Herangehensweise aber so wie ich das verstehe hilft das nur für gerade strecken. Denn das Auto kann ja theoretisch auch abbiegen. Dafür müsste ich ja erstmal herausfinden nach wie vielen Metern das passiert. Sonst kann ich die Koordinaten ja nicht entsprechend abändern. Für eine rein gerade Strecke wäre das bestimmt eine gute Lösung!
    Aber dennoch bringt mich dein Ansatz auf eine Idee: Ich werde einmal versuchen die einzelnen Wegpunkte (also wo sich die Richtung der Route ändert) ausgeben zu lassen mit der entsprechenden Entfernung. Dann könnte ich mit Hilfe deiner Formel eventuell neue Koordinaten an das System weiter geben. Bleibt dann nur noch abzuwarten, wie performant das Ganze dann ist.

    @ErfinderDesRades Generell hast du Recht. Meine aktuelle Abfrage liefert nur wenige Informationen, welche ich dafür verwenden könnte. Deshalb wollte ich hier im Forum mal Fragen, ob jemand weiß wie das geht. Im Internet gibt es bereits mehrere Seiten, welche Fahrzeuge entsprechender einer Route exakt entlang fahren lassen und nach der berechneten Zeit dort ankommen. Dabei verkürzt sich die Route auch stetig, also die "rote" Markierung wird kürzer.

    Fluffing schrieb:

    Auslesen kann ich die ja bereits. Z.B. benutze ich die Werte aus "distance" und "time" bereits für mein Programm.
    Also noch ein neuer Sachverhalt:
    Ich habe eine Reihe von Koordinaten, die sehen so und so aus, die möchte ich so und so darstellen und nacheinander verbunden haben.
    Haben wir es jetzt?
    Schreib eine vollständige und belastbare Problembeschreibung / Aufgabenstellung, dann rfeden wir weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Fluffing schrieb:

    Ich verstehe deine Herangehensweise aber so wie ich das verstehe hilft das nur für gerade strecken.

    Jo, das ist richtig. Ein Vektor ist immer eine Gerade. Was mir natürlich verwehrt bleibt, ist die Tatsache, wie klein du es generell skalieren kannst. Also ein Vektor, dessen Länge nahezu 0 ist, kann ein Kreis bilden ;) Aber wie gesagt, ich wusste ja nicht wie klein deine Distanzen von Punkt zu Punkt sind. Aber das ist dann wieder ein Problem deiner Datenvorhaltung, respektive der Datenqualität, die für dein Vorhaben evtl. vorliegt.

    Wie performant das ganze wird? Nun wenn es fixe Datenpunkte sind, dann wird es genauso sein als hättest du ein einfaches Spiel. Denn auch Spiele updaten mitunter 60 mal in der Sekunde (und öfter). Und da es feste Datenstrukturen sind, kein Problem
    Erstmal ein Danke an alle, die bis jetzt geholfen haben das Problem zu lösen. Ich konnte jetzt anhand der weiteren Auswertung und Anpassung der XML einen ersten Fortschritt vorweisen. Das Programm aktualisiert aktuell immer die Koordinaten, wenn für das Fahrzeug ein Richtungswechsel stattfindet. Das ist zwar dann nicht immer alle 500m aber schon mal ein guter erster Schritt!

    @RodFromGermany Die Anzahl an Koordinaten habe ich ja nur bedingt. Ich möchte es ja gerade schaffen, diese herauszufinden. Das nachträgliche Verbinden wäre ja erstmal das kleinere Problem.

    Aber wie genau komme ich an die jeweils einen Koordinaten der Strecke? Das wäre auch meine nächste Frage an alle gewesen. Diese sollen ja im besten Fall alle 500m entlang der Route ausgegeben werden.
    @Fluffing Schreib eine vollständige und belastbare Aufgabenstellung / Problembeschreibung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @PadreSperanza Genau.
    Du schreibst implizit, dass Du alle Informationen hast.
    Wo genau liegt das Problem?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!