Suchen Sie nach Ressourcen oder einem Algorithmus, um Folgendes in einer Navigations-App zu berechnen:
Wenn meine aktuelle GPS-Position (0,0) ist und ich bei 25 km / h 32 Grad fahre, wie kann ich berechnen, wie hoch meine Position in 10 Sekunden ist?
d. h .: GPSCoordinate predictedCoord = GPSCoordinate.FromLatLong(0, 0).AddByMovement(32, 15, TimeSpan.FromSeconds(10));
Bearbeiten: Der aktuelle Code basiert auf der Antwort unten:
%Vor%Hier ist die vollständige parametrische Antwort:
Variablen:
heading
: Überschrift (d. h. Rückwärtswinkel von Azimut 0 ° in Grad) speed
: Geschwindigkeit (d. h. Norm des Geschwindigkeitsvektors in Meilen / Stunde) lat0
, lon0
: Anfangskoordinaten in Grad dtime
: Zeitintervall von der Startposition in Sekunden lat
, lon
: vorhergesagte Koordinaten in Grad pi
: Die pi Konstante (3.14159 ...) Rt
: Erdradius in Meilen (6378137,0 Meter, was 3964.037911746 Meilen ergibt) In einem (östlichen, nördlichen) lokalen Rahmen ist die Position nach dem Zeitintervall:
%Vor%(mit Koordinaten in Meilen)
Von dort können Sie die neue Position im WGS84-Rahmen (d. h. Breiten- und Längengrad) berechnen:
%Vor%Bearbeiten: Korrigiert die letzte Zeile: * sin (phi) zu / sin (phi)
Hier sind die Formeln, die Sie brauchen.
Ich hoffe, das hilft.
Bob
[update] Hier sind die Formeln in JavaScript (aus der Quelle kopiert)
var lat2 = Math.asin (Math.sin (lat1) * Math.cos (d / R) + Math.cos (lat1) * Math.sin (d / R) * Math.cos (brng)); var lon2 = lon1 + Math.atan2 (Math.sin (brng) * Math.sin (d / R) * Math.cos (lat1), Math.cos (d / R) -Math.sin (lat1) * Math.sin (lat2));
d = zurückgelegte Entfernung = Geschwindigkeit x Zeit R = Radius der Erde