Wie berechne ich den Azimut (Winkel nach Norden) zwischen zwei WGS84-Koordinaten

7

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 verwenden

sin (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

ist

Irgendwelche Hinweise?

(Ich möchte keine Bibliotheken dafür verwenden, insbesondere keine, die Runtime-Lizenzen benötigen. Jede MPL-Delphi-Quelle wäre großartig.)

    
dummzeuch 13.03.2009, 12:56
quelle

5 Antworten

10

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.

Wouter van Nifterick 17.03.2009, 04:33
quelle
5

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%     
Jader Dias 26.06.2009 19:48
quelle
3

Ich habe diesen Link gefunden

Ссылка

in der Antwort auf

angegeben

Breite / Länge + Entfernung + Überschrift - & gt; Lat / Lon

Das sieht vielversprechend aus, besonders die Annäherung an die flache Erde am Ende.

    
dummzeuch 13.03.2009 19:07
quelle
2

Dies würde nur für kleine Unterschiede funktionieren. Ansonsten kann man nicht einfach "BreiteDifferenz / LängsDifferenz".

    
Yosi 14.09.2009 09:43
quelle
0

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.

    
skamradt 13.03.2009 16:22
quelle

Tags und Links

yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '421039',
    'url' => 'how-do-i-calculate-the-azimuth-angle-to-north-between-two-wgs84-coordinates',
];

$_SESSION = [
    '__flash' => [],
];