Ich habe zwei WGS84-Koordinaten, Breiten- und Längengrad in Grad. Diese Punkte liegen ziemlich nahe beieinander, z. nur einen Meter auseinander.
Gibt es einen einfachen Weg, um den Azimut der Linie zwischen diesen Punkten zu berechnen, dh den Winkel nach Norden?
Der naive Ansatz wäre, ein kartesisches Koordinatensystem anzunehmen (weil diese Punkte so nahe beieinander liegen) und einfach
zu verwendensin (a) = abs (L2-L1) / sqrt (sqr (L2-L1) + sqr (B2-B1))
a = Azimut L1, L2 = Länge B1, B2 = Breitengrad
Der Fehler wird größer, wenn sich die Koordinaten vom Äquator weg bewegen, weil dort der Abstand zwischen zwei longitudinalen Grad immer kleiner wird als der zwischen zwei Breitengrad (der konstant bleibt).
Ich habe einige ziemlich komplexe Formeln gefunden, die ich nicht wirklich umsetzen möchte, weil sie für Punkte, die so nahe beieinander liegen, übertrieben sind und ich keine sehr hohe Präzision brauche (zwei Dezimalstellen sind genug, eine ist wahrscheinlich in Ordnung) Entweder gibt es andere Faktoren, die die Präzision sowieso reduzieren, wie die, die das GPS zurückgibt).
Vielleicht könnte ich einfach einen ungefähren longitudinalen Korrekturfaktor in Abhängigkeit vom Breitengrad bestimmen und so etwas verwenden:
sin (a) = abs (L2 · f - L1 · f) / sqrt (sqr (L2 · f - L1 · f) + sqr (B2-B1))
wobei f der Korrekturfaktor
istIrgendwelche Hinweise?
(Ich möchte keine Bibliotheken dafür verwenden, insbesondere keine, die Runtime-Lizenzen benötigen. Jede MPL-Delphi-Quelle wäre großartig.)
Die Formeln, auf die Sie im Text Bezug nehmen, sollen den Großkreisabstand zwischen zwei Punkten berechnen. So erstelle ich den Winkel zwischen den Punkten:
%Vor%Denken Sie daran, die Situation zu behandeln, in der 2 Punkte gleich sind (prüfen Sie, ob das Ergebnis gleich cNO_ANGLE ist, oder ändern Sie die Funktion, um eine Ausnahme auszulösen);
Diese Funktion setzt voraus, dass Sie sich auf einer ebenen Fläche befinden. Mit den kleinen Entfernungen, die du erwähnt hast, ist das alles in Ordnung, aber wenn du die Überschrift zwischen Städten auf der ganzen Welt berechnen willst, solltest du in etwas suchen, das die Form der Erde in der Zählung annimmt;
Es empfiehlt sich, diese Funktion mit Koordinaten zu versehen, die bereits einer ebenen Fläche zugeordnet sind. Sie könnten WGS84 Latitude direkt in Y einspeisen (und lon in X), um eine grobe Annäherung zu erhalten.
Hier ist die C # -Lösung. Getestet für Winkel von 0, 45, 90, 135, 180, 225, 270 und 315.
Bearbeiten Ich habe meine vorherige hässliche Lösung durch die C # -Übersetzung von Wouter's Lösung ersetzt:
%Vor%Ich habe diesen Link gefunden
in der Antwort auf
angegebenBreite / Länge + Entfernung + Überschrift - & gt; Lat / Lon
Das sieht vielversprechend aus, besonders die Annäherung an die flache Erde am Ende.
Dies würde nur für kleine Unterschiede funktionieren. Ansonsten kann man nicht einfach "BreiteDifferenz / LängsDifferenz".
Ich würde empfehlen, einen Korrekturfaktor basierend auf dem Längengrad zu implementieren. Ich implementierte einmal eine simuläre Routine, um alle geokodierten Datensätze innerhalb von x Meilen einer bestimmten Stelle zurückzugeben, und stieß auf ähnliche Probleme. Leider habe ich den Code nicht mehr und kann mich nicht daran erinnern, wie ich zu der Korrekturnummer gekommen bin, aber Sie sind auf dem richtigen Weg.
Tags und Links delphi geolocation geospatial