Umrechnung GPS <-> kartesische Koordinaten
-
Hi,
Ich habe eine größere Simulation in C++/Matlab gegeben, die Roboter und ihre Interaktion simuliert. Nun wird die Simulation stückweise auf ein reales System übertragen, wobei in der Simulation die Position der Roboter mittels (lokalen) kartesischen Koordinaten (x/y/z) erfolgt.
Im realen System erfolgt die Positionsbestimmung mit GPS, sodass (Längengrad/Breitengrad/Höhe) gegeben ist. Zwecks Anbindung der Simulation an das reale System, müssen diese Koordinaten ineinander umgerechnet werden.
Meiner Meinung müsste die Umrechnung ein einfacher Dreisatz sein, wobei die Krümmung von Längen/Breitengrad miteinbezogen werden müsste. Weiß jemand spontan, wie man das am besten / einfachsten hinbekommt?Ich habe schon einige Umrechnung für kartesische Koordinaten <-> GPS Koordinaten gefunden, aber die beziehen sich immer auf ein globales Koordinatensystem im Erdmittelpunkt und beziehen die Erdkrümmung etc. auch mit ein. Mein Koordinatensystem hat jedoch irgendwo ein Referenzpunkt auf der Oberfläche und kann wegen der (im Vergleich zur Erdgröße) geringen Größe vollständig krümmungsfrei (d.h. ein "echtes" kartesisches Koordinatensystem) angenommen werden.
Die aktuelle Umrechnung für (x/y) -> (lat/long) sieht so aus:
//Pseudocode latitude = ReferencePosLat + positionX / 111132.9556; longitude =ReferencePosLong + positionY / ( 111132.9556 * cosd(latitude) );
Leider ist derjenige, der diese Umrechnung "verzapft" hat, nicht mehr zu erreichen und ich bin mir nach 2 h debugging relativ sicher, dass diese Umrechnung falsch ist. Zudem kann ich auch kaum nachvollziehen, wie man auf diese Umrechnung kommt - meine Versuche brachten immer komplett anderen Konstanten / Zusammenhänge hervor.
Also jemand spontan eine Idee, wie ich ansetzen könnte?
Viele Grüße
Bubbles
-
Bubbles123 schrieb:
Zudem kann ich auch kaum nachvollziehen, wie man auf diese Umrechnung kommt - meine Versuche brachten immer komplett anderen Konstanten / Zusammenhänge hervor.
latitude wird direkt nur mit einem Vorfaktor umgerechnet, da eine Einheit geographischer Breite immer das gleiche in Einheiten des Systems zählt. Der Abstand zwischen zwei Breitengraden ist nämlich immer der gleiche.
Den Längengrad kann man nicht so direkt umrechnen, da die Länge eines Breitenkreises (auf dem der Längengrad angegeben wird) abhängig ist von der geographischen Breite. Nahe am Nordpol ist der Abstand zwischen 0° und 10° ein paar Meter, am Äquator sind es tausende Kilometer. Die Länge eines Breitenkreises geht mit dem Cosinus der Breite, daher dieser Vorfaktor vor der Umrechnungskonstante.
Die Umrechnungskonstante selbst ist beliebig und gibt dir durch ihre Wahl die Einheiten deines Systems vor. In der gezeigten Umrechnung ist die Erde eine perfekte Kugel mit einem
Umfang von 111132.9556 Längeneinheiten deines Systems. Korrigiere: Eine Breitengradeinheit entspricht 111132.9556 Systemeinheiten. Hieraus folgere ich, dass die Breitengerade wohl in klassischen Grad angegeben werden, während in dem System mit Metern gerechnet wird, denn dann passt das exakt zusammen mit dem Erdumfang (sofern man die Erde als perfekte Kugel ansieht), denn Erdradius * 2 * Pi / 360° sind ziemlich genau 111 km/Grad.Noch ein Tipp: Benutz nicht das Wort GPS-Koordinaten, wenn du von geographischen Positionsangaben sprichst. Wenn man sich nur die Überschrift ansieht, dann denkt man, du hättest ein GPS-Signal und möchtest aus diesem deine Position bestimmen. Das ist ein anspruchvolles mathematisch, technisch, physikalisches Problem, von dem die meisten Leute keine Ahnung haben und den Thread gar nicht erst lesen. Dabei hast du bloß eine einfache Umrechnung von sphärischen Koordinaten in karthesische, sogar nochmals vereinfacht, da die Krümmung ignoriert wird. Das könnte dir jeder Student einer Naturwissenschaft im ersten oder zweiten Semester im Schlaf vorrechnen, wenn er den Thread nur lesen würde.
-