« 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
ähnliche Themen
- » GPS Modul - Kaufhilfe - MTG, SIRF III oder u-blox?
- » Frankreich mit dem Rad, Europa Basemap für Garmin GPS 60CSX
- » GPS Touren in Norddeutschland
- » PDA SW Konvertieren GPS Track gpx -> tk
- » Suche Software =?ISO-8859-15?für GPS-Logger (Royaltek =?ISO-8859-15?RBT-2300)
- » GPS blogging - send your position over the air to a google map!
- » Erfassen von GPS-Koordinaten in Excel
- » Entfernen von Karten auf dem GPS Handgerät (z.B. Garmin Colorado 300)
- » GPS Wandern
- » aktueller GPS-Test (Autonavigation)