« zurück zur Hauptseite...

Entfernung zwischen zwei GPS Koordinaten


Autor: "Dominik Schmidt" (2005-08-16 07:12:39)

Moin !

Meine kleine GPS Simulation kommt langsam vorran. Ich kann schon die Daten
einlesen und in 3D darstellen (und drehen, etc). Das ganze schaut in etwa so
aus: http://www.logview.info/phpBB2/download.php?id% (hoffe der Link funzt
so ...).

Nun würde ich gerne die Gesamtstrecke und die Strecken zwischen jeweils zwei
Punkten berechnen. Mein Mathe in der Hinsicht ist aber etwas angestaubt und
deswegen habe ich gestern mal ein bisserl im Web gesucht. Gefunden habe ich
auch 2 Funktionen, aber jeweils mit dem Kommentar, dass das bei langen bzw.
kurzen Entfernungen nicht sauber funktioniert.
Deswegen mal die Frage hier ... Kann mir jemand eine Formel geben, die
universell einsatzbar ist und immer das richtige Ergebnis (=Entfernung)
liefert? Der Input wäre also z.B.:
N46.38.3242
E14.17.6446
N46.38.3250
E14.17.6470
Und die Funktion liefert dann 299m als Beispiel.

Und als weitere Frage ... Ich möchte die Daten eine Modellflugzeugs
visualisieren. Da ist es ja nun nicht ganz unerheblich, wie die aktuelle
Höhe ist. Also bräuchte ich als Erweiterung zur ersten Formel noch eine
Ergänzung und zwar mit Höhe. Der Input wäre dann z.B.:
N46.38.3242
E14.17.6446
123m
N46.38.3250
E14.17.6470
150m
Und das Ergebnis z.B. 400m.

Und last but not least ... Wie ist eurer Meinung nach die Höhenangabe des
GPS zu werten? Ist die Angabe halbwegs verlässlich, oder nicht? Da wir die
Höhe auch noch zusätzlich über einen Drucksensor erfassen, könnte ich da
evtl. Fehler ausgleichen.

So denn schon mal Danke!

Greetz Dominik

Autor: "Thomas Petersen" (2005-08-16 08:42:35)

>
> Meine kleine GPS Simulation kommt langsam vorran. Ich kann schon die
Daten
> einlesen und in 3D darstellen (und drehen, etc). Das ganze schaut in
etwa so
> aus: http://www.logview.info/phpBB2/download.php?id% (hoffe der Link
funzt
> so ...).
>
Moin,
sieht ja schon sehr gut aus, wie machst Du das(welche Software)sowas
interessiert mich auch.
Gruß
Thomas

Autor: "Thomas Petersen" (2005-08-16 08:42:35)


Autor: "Thomas Petersen" (2005-08-16 08:42:35)

>
> Meine kleine GPS Simulation kommt langsam vorran. Ich kann schon die
Daten
> einlesen und in 3D darstellen (und drehen, etc). Das ganze schaut in
etwa so
> aus: http://www.logview.info/phpBB2/download.php?id% (hoffe der Link
funzt
> so ...).
>
Moin,
sieht ja schon sehr gut aus, wie machst Du das(welche Software)sowas
interessiert mich auch.
Gruß
Thomas

Autor: "Dominik Schmidt" (2005-08-16 08:58:14)

"Thomas Petersen" schrieb im Newsbeitrag

> sieht ja schon sehr gut aus,
Danke !

>wie machst Du das(welche Software)
Tja, also ich nutze erstmal Delphi zum Programmieren. Damit mache ich dann
auch die ganzen Umrechnungen der GPS Daten. Und die Anzeige übernimmt dann
OpenGL.

Ich müsste allerdings noch ein paar Sachen verbessern und die Bedienung
vereinfachen. Es ist halt alles noch etwas im Alphastadium ;)

>sowas interessiert mich auch.
Bei Interesse kann ich das mal weiterbasteln und ausweiten. Das hatte ich eh
vor, weil ich es halt für Modellflug verwenden möchte.

Greetz Dominik

Autor: Gabriel Ebner (2005-08-17 19:20:34)

Jürgen Schlottke wrote:

> Kommt drauf an. Mit den Formeln kannst Du vom Prinzip her schon auch
> genaue Entfernungen bei kurzen Strecken rausbekommen - wenn Du
> mathematische Bibliotheken für die Winkelfunktionen mit hinreichender
> Genauigkeit einsetzt. Das Problem ist: 32-Bit PCs setzen in
> Feld-Wald-Wiesenprogrammiersprachen auch nur mathematische Routinen mit
> 32-Bit Genauigkeit ein). Und das ist für Winkelfunktionen bei sehr
> kleinen Winkeln im Bereich von tausendstel Grad Winkelunterschied zu
> wenig, um wirklich zuverlässig genaue Ergebnisse aus Berechnungen zu
> liefern.

Das letzte Mal, als ich mich umgeschaut habe, waren doubles (64-bit) noch
überall die Norm. Manche Sprachen haben sogar doubles als den einzigen
numerischen Datentyp (z.B. Lua). Es liegen hier auch ein paar
Einsteigertexte herum, die doubles glorifizieren und dem Novizen
einschärfen, nie etwas anderes zu verwenden.

> 1. Du besorgst Dir für Deine Programmiersprache eine mathematische
> Spezialbibliothek, die Winkelfunktionen mit mindestens 128 Bit
> Genauigkeit unterstützt und rechnest alle Winkelfunktionen damit aus.
> Dann kannst Du Deine Formeln verwenden. Das kann allerdings sehr teuer
> und sehr programmieraufwändig werden.

Programmieraufwändig?

#include <math.h>

long double distance(long double r,
long double lat1, long double lon1,
long double lat2, long double lon2) {
return r * acosl(sinl(lat1) * sinl(lat2)
+ cosl(lat1) * cosl(lat2) * cosl(lon1 - lon2));
}

Einmal abgesehen davon, kann man ja auch äquivalente Formeln verwenden, die
weniger sensitiv auf kleine Genauigkeiten reagieren.

> Wenn Du die Höhe noch dazunimmst, bewegt sich das Modellflugzeug ganz
> einfach in einem dreidimensionalen kartesischen Koordinatensystem, in dem
> Berechnungen keine Probleme machen. Vektorrechnung wie in der Schule.

Das ganze einfach mit Vektorrechnung in einem ECEF-Koordinatensystem zu
berechnen, dürfte wohl das einfachste (und sinnvollste, da beim Fliegen die
Höhenunterschiede nicht unbeträchtlich sind) sein.

Gabriel.

Autor: B?SsO8cmdlbiBTY2hsb3R0a2U= (2005-08-17 23:38:38)

Hallo Gabriel!

> Das letzte Mal, als ich mich umgeschaut habe, waren
> doubles (64-bit) noch überall die Norm. Manche Sprachen
> haben sogar doubles als den einzigen numerischen Datentyp
> (z.B. Lua).

Ja, Du hast Recht, der OP bekommt mit der Genauigkeit auch mit
Standardbibliotheken seiner Programmiersprache überhaupt kein Problem.
Spezialbibliotheken mit 128 Bit Genauigkeit sind bei
GPS-Entfernungsberechnungen tatsächlich nicht erforderlich.

Die Programmiersprache "Delphi", die der OP verwendet, berechnet
sämtliche Winkelfunktionen intern sogar vollkommen automatisch mit dem
Format "extended", das sind 80 Bit Zahlen, mit denen die mathematischen
Coprozessoren bei Intel x86 Prozessoren rechnen. Und nur auf die
Genauigkeit der Winkelfunktionen kommt es in diesem Fall im wesentlichen an.

Ein Ausdruck wie:

entfernung:c71000.0*arccos(sin(lat1*pi/180)*sin(lat2*pi/180)+cos(lat1*pi/180)*cos(lat2*pi/180)*cos((lon1-lon2)*pi/180));
mit lat1, lon1 für den ersten Punkt und lat2, lon2 für den zweiten
Punkt, jeweils Dezimal in Grad angegeben und dem Ergebnis in Metern,

wird daher auch dann auf 0,05 Meter genau, wenn nur "Single" für die
Variablen definiert wird, weil die Winkelfunktionen (und daher auch der
überwiegende Teil des o.g. Ausdrucks) von Delphi eben trotzdem intern
genauer gerechnet werden. Bei Verwendung des Datentyps "Extended" für
die Variablen sind die Ergebnisse sogar genauer als 0,01 Meter, also in
jedem Fall weitaus besser als die GPS-Positionsgenauigkeit von typischem
Equipment, das man in einem Modellflugzeug problemlos einbauen kann.

Jürgen