Forum: Mikrocontroller und Digitale Elektronik GPS distanz berechnung


von Milan M. (milance)


Lesenswert?

Hallo zusammen,

ich benutze die funktion um von 2 gps koordinaten distanz zu messen:
1
double GET_DISTANZ_IN_M(void)
2
{
3
  double dist=0;
4
  dist = ((2*M_PI* 6378388)/360) * acos(sin(45.0141) * sin(45.0140) + cos(45.0141) * cos(45.0140) * cos(8.310342 - 8.310342));
5
  return dist;  //destination in meter
6
}
resultat soll:11.13m  mit taschenrechner und google überprüft
resultat ist: 38.44m  am atxmega128a1

kann mir bitte jemand helfen, ich bin am verzweifeln.

Danke im Voraus
Milan

von Bernie (Gast)


Lesenswert?

Bist du dir sicher, dass die Winkelfunktionen mit
Grad-Angaben "gefüttert" werden dürfen?

Meistens musst du vorher Grad->rad umrechnen!

von Michael (Gast)


Lesenswert?

Milan M. schrieb:
> resultat soll:11.13m  mit taschenrechner und google überprüft

Für derartig kleine Abstände den Rechner mit trigonometrischen Formeln 
zu quälen, ist vielleicht etwas übertrieben. Probier's doch mal mit 
dem guten alten Phytagoras.

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Jap, die Zahlen müssen im Bogenmaß übergeben werden, und da kommt dann 
vollkommen korrekt eine Distanz von 0 Metern für das gewählte Beispiel 
raus.

Edit: Pardon, es kommt natürlich nicht ganz 0 Meter raus sondern knapp 
19cm, dürfte bei GPS aber im Rahmen der Messungenauigkeit liegen ;D

von Milan M. (milance)


Lesenswert?

Michael schrieb:
> Milan M. schrieb:
>> resultat soll:11.13m  mit taschenrechner und google überprüft
>
> Für derartig kleine Abstände den Rechner mit trigonometrischen Formeln
> zu quälen, ist vielleicht etwas übertrieben. Probier's doch mal mit
> dem guten alten Phytagoras.

das ist nur ein beispiel, die distanzen werden aber bis zu 1 km gross 
sein.


Daniel H. schrieb:
> Jap, die Zahlen müssen im Bogenmaß übergeben werden, und da kommt dann
> vollkommen korrekt eine Distanz von 0 Metern für das gewählte Beispiel
> raus.



das ist eben falsch es sind 11.13m (12m gerundet)
http://www.gpsvisualizer.com/calculators

von Michael (Gast)


Lesenswert?

Milan M. schrieb:
> das ist nur ein beispiel, die distanzen werden aber bis zu 1 km gross
> sein.

Dafür ist der Herr Phytagoras immer noch gut - oder welche Genauigkeit 
brauchst du.

von Milan M. (milance)


Lesenswert?

Michael schrieb:
> Milan M. schrieb:
>> das ist nur ein beispiel, die distanzen werden aber bis zu 1 km gross
>> sein.
>
> Dafür ist der Herr Phytagoras immer noch gut - oder welche Genauigkeit
> brauchst du.

je genauer desto besser. :-)

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Kann es sein, dass du den Erdradius falsch berechnest?

http://www.kompf.de/gps/distcalc.html

Bei dir kommt ein Radius von über 100.000km raus.

von Bernie (Gast)


Lesenswert?

@ Michael (Gast) und @  Daniel H. (Firma: keine)

Ich würde mit einem µC auch probieren, es ohne eine
math-lib zu machen. Aber eure Beiträge zusammen verunsichern
doch den TO!

@ Milan M.
Hast du es mit Grad->rad und ggfs. umgekehrt versucht?
Es sollte das Richtige herauskommen, wenn die Formel stimmt.

Zur Vereinfachung kann man bei kleinen Distanzen natürlich den
Pythagoras nehmen: 1° = 111,120 km.
- Allerdings musst du die Längendifferenzen vorher mit dem
sinus der Breite (in Bogenmaß!) multiplizieren.

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Warum verunsichern ihn meine Beiträge? Ich habe lediglich gesagt, dass 
seine Berechnung bei mir das gleiche Ergebnis liefert (Anmerkung: unter 
Linux auf nem PC).

Die Ursache ist aber Folgende, wie ich festgestellt habe:
1. Die trigonometrischen Funktionen bei C erwarten Radian als Eingabe
2. Übergibt man nun Radian an die trigonometrischen Funktionen, so passt 
die Berechnung des Erdumfangs nicht mehr, dort kommt ein Wert von 
~111.000 (wie er bei Berechnung in Grad korrekt wäre), bei Berechnung in 
Radian muss aber etwa  um die 6.300 herauskommen.

Edit:
dist = 6378.388 * acos(sin(0.7856425094927275) * sin(0.7856442548219795) 
+ cos(0.7856425094927275) * cos(0.7856442548219795) * 
cos(0.1450428298667706 - 0.1450428298667706));

Damit kriege ich das korrekte Ergebnis (Winkel in Rad umgerechnet + 
Radius geändert).

von Bernie (Gast)


Lesenswert?

@ Daniel H. (Firma: keine)

2* M_PI * 6378388 ergibt schon ETWA den Erdumfang von
ca. 40.000.000 m

(2* PI * 6.378.388) / 360 = 111.323 m weicht nur um
zehntausendstel vom üblicherweise angenommenen Wert ab.

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Mag sein, passt hier aber nicht, da C nicht in Grad rechnet. Da ich 
selber nicht so sehr in GPS bewandert bin war es für mich unmittelbar 
klar, was wie wo berechnet wird, so dass ich mich erst durchklamüsern 
musste, deswegen bitte ich die eine oder andere Ungenauigkeit zu 
entschuldigen.

von Bernie (Gast)


Lesenswert?

Ja eben:

Milan M. benutzt Grad, wo rad von der math-lib erwartet werden.

Die Inversfunktionen liefern natürlich auch nur rad, statt Grad
als Winkel-Ergebnis.

Hoffen wir mal, dass der TO das jetzt mal probiert!

von Milan M. (milance)


Lesenswert?

folgendes habe ich geändert:
1
  double distan;
2
                char zeile1[100];
3
                double lat1,lat2,lon1,lon2, rad1,rad2,rad3,rad4;
4
                lat1  = NMEA_KOORD2GRAD("4500.8366", false);
5
                dtostrf(lat1, 4, 5, zeile1);
6
                strcat(zeile1, "    ");
7
                DisplayText(100, 100, zeile1);
8
                lat2  = NMEA_KOORD2GRAD("4500.84", false);
9
                dtostrf(lat2, 4, 5, zeile1);
10
                strcat(zeile1, "    ");
11
                DisplayText(100, 120, zeile1);
12
                lon1  = NMEA_KOORD2GRAD("0818.62052", false);
13
                dtostrf(lon1, 4, 6, zeile1);
14
                strcat(zeile1, "    ");
15
                DisplayText(100, 140, zeile1);
16
                lon2  = NMEA_KOORD2GRAD("0818.62052", false);
17
                dtostrf(lon2, 4, 6, zeile1);
18
                strcat(zeile1, "    ");
19
                DisplayText(100, 160, zeile1);
20
                
21
                
22
                
23
                rad1  = lat1 / 180 *M_PI;
24
                dtostrf(rad1, 4, 10, zeile1);
25
                strcat(zeile1, "    ");
26
                DisplayText(200, 100, zeile1);
27
                rad2  = lat2 / 180 *M_PI;
28
                dtostrf(rad2, 4, 10, zeile1);
29
                strcat(zeile1, "    ");
30
                DisplayText(200, 120, zeile1);
31
                rad3  = lon1 / 180 *M_PI;
32
                dtostrf(rad3, 4, 10, zeile1);
33
                strcat(zeile1, "    ");
34
                DisplayText(200, 140, zeile1);
35
                rad4  = lon2 / 180 *M_PI;
36
                dtostrf(rad4, 4, 10, zeile1);
37
                strcat(zeile1, "    ");
38
                DisplayText(200, 160, zeile1);
39
                
40
                
41
                
42
                
43
                
44
                
45
                
46
                
47
                
48
                
49
                
50
                
51
                
52
                
53
                
54
                  distan= GET_DISTANZ_IN_M(rad1,rad2,rad3,rad4);    
55
                          dtostrf(distan, 4, 2, zeile1);
56
                          strcat(zeile1, " m    ");
57
                          DisplayText(100, 200, zeile1);
1
double GET_DISTANZ_IN_M(double lat_aktuel, double lat_ziel, double lon_aktuel, double lon_ziel)
2
{
3
  double dist=0;
4
  double dist0=0;
5
  double dist1=0;
6
  double dist2=0;
7
  dist0 = sin(lat_aktuel) * sin(lat_ziel);
8
  dist1 = cos(lat_aktuel) * cos(lat_ziel) * cos(lon_ziel - lon_aktuel);
9
  dist = acos(dist0 + dist1);
10
  dist2 = (dist*6378388);
11
  return dist2;  //destination in meter
12
}

am display kommt 2202.25m

laut http://www.gpsvisualizer.com/calculators ist es 6m

von Michael (Gast)


Lesenswert?

Milan M. schrieb:
> je genauer desto besser. :-)

Das willst du deinem armen µC gar nicht zumuten und bei den 
Positionsfehlern eines Feld, Wald und Wiesen GPS ist das sowieso 
vergebene Liebesmüh.

Für eine genaue Abstandsbestimmung müßtest du dich von dem Modell der 
Erde als Kugel trennen. Die WGS-84 Koordinaten passen dann auch nicht 
mehr als Grundlage, sondern du müßtest zumindest mit dem verschobenen 
Koordinatenursprung eines lokalen geodätischen Datums rechnen.

von Michael (Gast)


Lesenswert?

Bernie schrieb:
> - Allerdings musst du die Längendifferenzen vorher mit dem
> sinus der Breite (in Bogenmaß!) multiplizieren.

Wohl eher durch cos(phi) teilen ;-)

von Bernie (Gast)


Lesenswert?

@  Michael (Gast)

Mit cos(phi) hast du recht! Aber TEILEN???

von Bernie (Gast)


Lesenswert?

@ Michael (Gast)

Jetzt lassen wir mal alles drumherum weg, auch die Kritik
an der Overkill-Mathematik. Grundsätzlich klappen die
Formeln (nach meiner Erfahrung mit PC) auch bei kleinen
Entfernungen! OK?

Aus den Formeln im ersten Beitrag extrahiere ich:
Breite1:  45,0140°  = 0,7856425095
Breite2:  45,0141°  = 0,7856442548
Länge1:    8,31042° = 0,1450441912
Länge2:    8,31042° = 0,1450441912

Wir haben eine Breitendifferenz von 0,0001°
111,12 km * 0,0001 = 11,1 m
Wir haben eine Längendifferenz von 0,0000000°
cos(45,01405°) = 0,7069333641
0 * 0,7069333641 = 0
Ergebnis mit Pythagoras: 11,1 m

Im Beitrag von Milan M. um 21:54 stehen ganz wilde
Sachen mit "4500.8366", aber kein Aufruf rad_grad() o.ä.

???

von Bernie (Gast)


Lesenswert?

@ Milan M.

Zeig uns bitte nicht, was du stringmäßig anzeigst,
sondern was du aus den NMEA-Daten machst, um sie
als rad1, rad2, ... an die Funktion
GET_DISTANZ_IN_M(...) zu übergeben.

von Milan M. (milance)


Lesenswert?

Bernie schrieb:
> @ Milan M.
>
> Zeig uns bitte nicht, was du stringmäßig anzeigst,
> sondern was du aus den NMEA-Daten machst, um sie
> als rad1, rad2, ... an die Funktion
> GET_DISTANZ_IN_M(...) zu übergeben.
1
double lat1,lat2,lon1,lon2, rad1,rad2,rad3,rad4;
2
3
                lat1  = NMEA_KOORD2GRAD("4500.8366", false);
4
               
5
                lat2  = NMEA_KOORD2GRAD("4500.84", false);
6
                
7
                lon1  = NMEA_KOORD2GRAD("0818.62052", false);
8
               
9
                lon2  = NMEA_KOORD2GRAD("0818.62052", false);
10
               
11
                
12
                
13
                
14
                rad1  = lat1 / 180 *M_PI;
15
               
16
                rad2  = lat2 / 180 *M_PI;
17
                
18
                rad3  = lon1 / 180 *M_PI;
19
               
20
                rad4  = lon2 / 180 *M_PI;
21
               
22
                
23
                
24
           
25
                
26
                  distan= GET_DISTANZ_IN_M(rad1,rad2,rad3,rad4);    
27
28
29
30
31
double GET_DISTANZ_IN_M(double lat_aktuel, double lat_ziel, double lon_aktuel, double lon_ziel)
32
{
33
  double dist=0;
34
  double dist0=0;
35
  double dist1=0;
36
  double dist2=0;
37
  dist0 = sin(lat_aktuel) * sin(lat_ziel);
38
  dist1 = cos(lat_aktuel) * cos(lat_ziel) * cos(lon_ziel - lon_aktuel);
39
  dist = acos(dist0 + dist1);
40
  dist2 = (dist*6378388);
41
  return dist2;  //destination in meter
42
}

von Bernie (Gast)


Lesenswert?

In deinem ersten Beitrag standen die Werte 45.0141
und 45.0140 als Breitengrade in der Formel.

Was haben die mit "4500.8366" und "4500.84" zu tun?

NMEA liefert doch bei Breite GGMM.MMMM... und bei Länge
GGG.MMMMM...

Hast du dafür gesorgt, dass GG (oder GGG) vorm Dezimalpunkt
landen und MM.MMMMMM... geteilt durch 60 als Nachkommastellen
hinter dem Dezimalpunkt landen?

(Entschuldige bitte, habe früher nur mit Turbo-C, dann
 mit AVR-Assembler Erfahrungen gemacht.)

von Bernie (Gast)


Lesenswert?

Breite:
GGMM.mmmm    GG     MM,mmmm
4500.8366 -> 45° + (00,8366/60)° = 45,0139433
4500.8400 -> 45° + (00,8400/60)° = 45,0140000

Breitendifferenz = 0,0000567° => 6,3 m


Länge:
"0818.62052" ist schon mal schlecht, es sind 3-stellige
Grad-Werte (180° East/West) möglich.

Also besser
 GGGMM.mmmmm      GGG     MM,mmmmm
"00818.62052" ->  008° + (00,62052/60)° = 8,010342°

Was hat das mit 8.310342° aus dem ersten Beitrag zu tun?

(Spielt aber keine Rolle bei der Rechnung, wenn L1 = L2)

Du machst es einem nicht leicht, dir zu helfen!

von Milan M. (milance)


Lesenswert?

Bernie schrieb:
> Also besser
>  GGGMM.mmmmm      GGG     MM,mmmmm
> "00818.62052" ->  008° + (00,62052/60)° = 8,010342°

Hallo Barnie,

da hast du ein fehler gemacht:

>  GGGMM.mmmmm      GGG     MM,mmmmm
> "00818.62052" ->  008° + (00,62052/60)° = 8,010342°      //falsch

>  GGGMM.mmmmm      GGG     MM,mmmmm
> "00818.62052" ->  008° + (18,62052/60)° = 8.310342°      //richtig


hast recht ist für das beispiel egal, ich bekomme trotz dem 2202.24m 
diferenz

von Karl H. (kbuchegg)


Lesenswert?

Milan M. schrieb:
> Bernie schrieb:
>> Also besser
>>  GGGMM.mmmmm      GGG     MM,mmmmm
>> "00818.62052" ->  008° + (00,62052/60)° = 8,010342°
>
> Hallo Barnie,
>
> da hast du ein fehler gemacht:
>
>>  GGGMM.mmmmm      GGG     MM,mmmmm
>> "00818.62052" ->  008° + (00,62052/60)° = 8,010342°      //falsch
>
>>  GGGMM.mmmmm      GGG     MM,mmmmm
>> "00818.62052" ->  008° + (18,62052/60)° = 8.310342°      //richtig
>
>
> hast recht ist für das beispiel egal, ich bekomme trotz dem 2202.24m
> diferenz

Dann nimm deine Formel, geh sie auf einem Taschenrechner Schritt für 
Schritt durch (Aufpassen, der benutzt Grad und nicht Radianten in den 
Winkelfunktionen), notier dir die Werte und vergleiche sie mit dem was 
auf dem AVR rauskommt.
Und erwarte dir auf dem AVR keine Wunder. Mit 5 bis 6 signifikanten 
Stellen, ist die Genauigkeit in der Floating Point Rechnerei schnell 
beim Teufel.

Oder benutz alternativ einfach den Phythagors. Für alles mit einer 
kleineren Distanz als 20 Kilometer dürfte der Unterschied keine 5 Meter 
betragen. So genau ist dein GPS gar nicht. Wer aus GPS Koordinaten Werte 
ausrechnet und die auf Zentimeter angibt (und kein differentielles GPS 
hat), der hat irgendwas grundlegendes nicht verstanden. Wenn die 
Ausgangswerte schon fast 10 Meter Abweichung zur exakten Position haben, 
dann kann jede Rechnung damit schon mal nicht genauer sein, als diese 
Abweichung. Zahlenfetischismus ist was für Anfänger, die allen zeigen 
wollen, dass sie Zahlen vom Taschenrechner abmalen können.

von Karl H. (kbuchegg)


Lesenswert?

Bernie schrieb:
> @ Daniel H. (Firma: keine)
>
> 2* M_PI * 6378388 ergibt schon ETWA den Erdumfang von
> ca. 40.000.000 m
>
> (2* PI * 6.378.388) / 360 = 111.323 m weicht nur um
> zehntausendstel vom üblicherweise angenommenen Wert ab.

Aber man darf nicht durch 360 dividieren, sondern muss durch 2*PI 
dividieren, was sich wiederrum mit der ursprünglichen Multiplikation 
wegkürzt.

Der Rest der Formel berechnet die Winkeldistanz am Grosskreis.
Im Original war diese Winkeldistanz in Grad angegeben. D.h. der 
Dreisatz-Ansatz war

    360°               .......  1 Erdumfang in m
    berechnete Grad    .......     x
   -----------------------------------------------

          berechnete Grad  * 1_Erdumfang_in_m
     x = -------------------------------------------
                      360

daher dir DIvision durch 360

Jetzt hat man keine Grad, sondern aus dem acos kommt ein Winkel in 
Radianten


     2*PI             .......  1 Erdumfang in m
     berechnete Rad   .......      x
   ----------------------------------------------

          berechnete Rad * 1_Erdumfang_in_m
     x = -------------------------------------
                       2*PI


setze für den Erdumfang die Berechnung aus dem Radius ein
   Umfang = 2*PI * Radius



        berechnete Rad * 2*PI * Erdradius
   x = ------------------------------------
                 2*PI


und das 2*PI kürzt sich weg und es bleibt


    x = Erdradius * berechnete_Radianten_zwischen_den_Punkten

von Duda (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Wer aus GPS Koordinaten Werte
> ausrechnet und die auf Zentimeter angibt (und kein differentielles GPS
> hat), der hat irgendwas grundlegendes nicht verstanden. Wenn die
> Ausgangswerte schon fast 10 Meter Abweichung zur exakten Position haben,
> dann kann jede Rechnung damit schon mal nicht genauer sein, als diese
> Abweichung.

War da nicht etwas mit relativer Genauigkeit?
Die Position, welche GPS liefert, stimmt ungefähr auf 10m, klar.
Die relative Genauigkeit einer zweiten (naheliegenden) Position dazu ist 
aber höher (im Meterberech).

von Karl H. (kbuchegg)


Lesenswert?

Duda schrieb:
> Karl Heinz Buchegger schrieb:
>> Wer aus GPS Koordinaten Werte
>> ausrechnet und die auf Zentimeter angibt (und kein differentielles GPS
>> hat), der hat irgendwas grundlegendes nicht verstanden. Wenn die
>> Ausgangswerte schon fast 10 Meter Abweichung zur exakten Position haben,
>> dann kann jede Rechnung damit schon mal nicht genauer sein, als diese
>> Abweichung.
>
> War da nicht etwas mit relativer Genauigkeit?
> Die Position, welche GPS liefert, stimmt ungefähr auf 10m, klar.
> Die relative Genauigkeit einer zweiten (naheliegenden) Position dazu ist
> aber höher (im Meterberech).

DAs nennt man dann differentielles GPS. Und das hab ich ja ausgenommen.
Wobei so einfach die Sache auch wieder nicht, weil man dann schon in 
Bereiche kommt, in der Signalreflexionen an Gebäuden anfangen eine Rolle 
zu spielen.

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
>> Die relative Genauigkeit einer zweiten (naheliegenden) Position dazu ist
>> aber höher (im Meterberech).
>
> DAs nennt man dann differentielles GPS.

Wenn du EGNOS als differentialles GPS bezeichnest, hast du Recht. Aber 
aktuelle Empfänger empfangen/verarbeiten die Signale, ohne dass der 
Nutzer das merkt und dass die Geräte als Differentiell-Empfänger 
bezeichnet werden.

Bernie schrieb:
> 2* M_PI * 6378388 ergibt schon ETWA den Erdumfang von

Die Genauigkeit bei der Angabe des Erdradius kann man sich sparen, da 
alleine schon die Abweichung zwischen mittlerem Radius (6371km) und 
Äquatorradius (6378) fast 7 km beträgt.
Die Verwendung vom Äquatorradius für obige Rechnung führt dann für 
Nord-Süd-Strecken z.B. zu einer berechneten Distanz von 1855m für eine 
Bogenminute (statt 1852,216m = 1 nm).

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Für alles mit einer kleineren Distanz als 20 Kilometer dürfte der
> Unterschied keine 5 Meter betragen.

Eher unterhalb von 0,2 Meter.

Karl Heinz Buchegger schrieb:
> Zahlenfetischismus ist was für Anfänger, die allen zeigen
> wollen, dass sie Zahlen vom Taschenrechner abmalen können.

Haltlose Behauptungen sind nicht besser ;-)

von Karl H. (kbuchegg)


Lesenswert?

Michael schrieb:

> Die Genauigkeit bei der Angabe des Erdradius kann man sich sparen, da
> alleine schon die Abweichung zwischen mittlerem Radius (6371km) und
> Äquatorradius (6378) fast 7 km beträgt.

Zudem ist die Erde keine polierte Billiardkugel.

von Duda (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> DAs nennt man dann differentielles GPS. Und das hab ich ja ausgenommen.
> Wobei so einfach die Sache auch wieder nicht, weil man dann schon in
> Bereiche kommt, in der Signalreflexionen an Gebäuden anfangen eine Rolle
> zu spielen.

Ich meine nicht DGPS, sonder einfach zwei unterschiedliche 
Positionsmessungen mit demselben Empfänger. Wenn es nur auf den Abstand 
in Metern ankommt, ist die absolute Positionsmessung irrelevant.

von Karl H. (kbuchegg)


Lesenswert?

Duda schrieb:
> Karl Heinz Buchegger schrieb:
>> DAs nennt man dann differentielles GPS. Und das hab ich ja ausgenommen.
>> Wobei so einfach die Sache auch wieder nicht, weil man dann schon in
>> Bereiche kommt, in der Signalreflexionen an Gebäuden anfangen eine Rolle
>> zu spielen.
>
> Ich meine nicht DGPS, sonder einfach zwei unterschiedliche
> Positionsmessungen mit demselben Empfänger. Wenn es nur auf den Abstand
> in Metern ankommt, ist die absolute Positionsmessung irrelevant.

Die absolute Position, die ein und derselbe Empfänger misst, ändert sich 
aber im Sekundentakt. Die hängt nämlich unter anderem auch von 
Signalreflexionen bzw. dem Zustand der Atmosphäre ab. Die 
Ausbreitungsgeschwindigkeit der Signale ist in unterschiedlichen 
Temperatur-Zellen der Atmosphöre unterschiedlich, sie ändert sich auch 
mit Vorgängen in der Ionosphäre. Wenn du dir mal die Rohdaten eines 
GPS-Empfängers ansiehst, dann mekrst du, dass ein am Boden liegender 
Empfänger laut Daten laufend in einem Umkreis von ein paar Meter hin und 
her zu springen scheint.

Genau deswegen macht man differentielles GPS. Dazu nimmt man einen 
bekannten Empfänger #in der näheren Umgebung#, dessen Position exakt 
bekannt ist und vergleicht diese bekannte Position mit dem vom GPS 
errechneten. Man kann dann davon ausgehen, dass ein anderer Empfänger in 
der näheren Umgebug #zu einem bestimmten Zeitpunkt# exakt die gleiche 
Abweichung feststellen wird, weil er ja dieselben Signale benutzt 
(solange er die gleichen Satelliten anmisst) und daher alle 
atmosphärischen Störungen sich bei beiden Empfängern gleich auswirken, 
weil die Funkwellen praktisch den gleichen Weg durch die Atmosphäre 
hatten. Der eine Empfänger dient mehr oder weniger als Fehlerfeststeller 
für den anderen.

von Michael (Gast)


Lesenswert?

Duda schrieb:
> Ich meine nicht DGPS, sonder einfach zwei unterschiedliche
> Positionsmessungen mit demselben Empfänger. Wenn es nur auf den Abstand
> in Metern ankommt, ist die absolute Positionsmessung irrelevant.

Schön wäre es. Die Fehler sind zeitlich nicht konstant, u.a. weil sich 
die Satellitenkonstellation und die Ionosphäre laufend ändern. Die 
Korrelationszeit liegt im Bereich von typ. 10 Sekunden.
Mit zwei gleichen Empfängern und Antennen sähe das besser aus, aber dann 
ist man wieder nahe bei richtigem DGPS.

von GPS (Gast)


Lesenswert?

http://www.u-blox.com/en/gps-modules/neo-6p-/neo-6p.html

High precision of < 1 m

Positionierungsgenauigkeit liegt durchschnittlich bei 0,4m.
Bei längerer Messdauer lässt sich die Genauigkeit mit etwas Rechnerei 
auf ca 6cm steigern.

von Milan M. (milance)


Lesenswert?

Hallo zusammen,
ich glaube das wir uns vom Thema entfernen.

Mir geht es nicht um die genauigkeit sondern nur um die rechnung.

Also geht die formel oben nicht, bei kleinen distanzen. oder????

GPS schrieb:
> http://www.u-blox.com/en/gps-modules/neo-6p-/neo-6p.html
>
> High precision of < 1 m
>
> Positionierungsgenauigkeit liegt durchschnittlich bei 0,4m.
> Bei längerer Messdauer lässt sich die Genauigkeit mit etwas Rechnerei
> auf ca 6cm steigern.

Besten dank für info.

von Michael (Gast)


Lesenswert?

Milan M. schrieb:
> Also geht die formel oben nicht, bei kleinen distanzen. oder????

Natürlich geht sie, aber der Satz des Pythagoras erlaubt es, für nahe 
beieinanderliegende Orte den Abstand wesentlich einfacher zu berechnen.
Du mußt dir aber bewußt sein, dass auch die Großkreisrechnung Fehler 
macht, weil die Erde keine Kugel ist.

von Milan M. (milance)


Lesenswert?

Michael schrieb:
> Milan M. schrieb:
>> Also geht die formel oben nicht, bei kleinen distanzen. oder????
>
> Natürlich geht sie, aber der Satz des Pythagoras erlaubt es, für nahe
> beieinanderliegende Orte den Abstand wesentlich einfacher zu berechnen.
> Du mußt dir aber bewußt sein, dass auch die Großkreisrechnung Fehler
> macht, weil die Erde keine Kugel ist.

ok, kannst mir bitte ein beispiel machen. Weil ich die zusammen setzung 
nicht so kapiere!

von Karl H. (kbuchegg)


Lesenswert?

Milan M. schrieb:

> Also geht die formel oben nicht, bei kleinen distanzen. oder????


Ich hab die Formel nicht kontrolliert. Ich geh mal davon aus, dass der, 
bei dem du sie abgeschrieben hast, schon weiß, wie man Entfernungen am 
Grosskreis rechnet.

Aber was ich dir sagen kann: Die Originalformel war für Grad gedacht, du 
musst aber aus technischen Gründen die Winkel in Radianten einsetzen. 
Und weil du das tun musst, muss auch die Berechnung für die metrische 
Bogendistanz eines Grades auf die metrische Bogendistanz für Radianten 
umgestellt werden.
Tust du das, dann wird schon annähernd das richtige rauskommen. 
Annähernd deshalb, weil es naiv ist, auf einem AVR mit seiner float 
Arithmetik Wunder zu erwarten. 5-6 signifikante Stellen lassen das nicht 
zu. Wer erwartet, dass er bei 100 Additionen von 0.01, beginnend bei 
0.0, letzten Endes bei 1.0 landet, der hat mit Zitronen gehandelt.

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich hab die Formel nicht kontrolliert. Ich geh mal davon aus, dass der,
> bei dem du sie abgeschrieben hast, schon weiß, wie man Entfernungen am
> Grosskreis rechnet.

Sonst kann man auch bei Wikipedia nachgucken - oft stimmt das ;-)
http://de.wikipedia.org/wiki/Orthodrome#Strecke

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Die Originalformel war für Grad gedacht, du
> musst aber aus technischen Gründen die Winkel in Radianten einsetzen.

Die Grundformel gilt unabhängig davon, wie die Größen angegeben sind.

Die Handhabung ist ganz einfach:
Wenn die verwendeten trigonometrischen Funktionen den Winkel in Grad 
erwarten, müssen die Winkel in Grad eingesetzt werden und wenn die 
verwendeten trigonometrischen Funktionen den Winkel im Bogenmaß 
erwarten, müssen die Winkel im Bogenmaß übergeben werden.

von Karl H. (kbuchegg)


Lesenswert?

Michael schrieb:
> Karl Heinz Buchegger schrieb:
>> Die Originalformel war für Grad gedacht, du
>> musst aber aus technischen Gründen die Winkel in Radianten einsetzen.
>
> Die Grundformel gilt unabhängig davon, wie die Größen angegeben sind.

Die Grundformel schon.
Aber in dem Formelteil, in dem der Erdradius eingeht, stecken das 
Grad-System in Form der 360 drinnen. Passt man den Teil nicht an das 
verwendete Syste an, kommt Blödsinn raus. Denn der acos liefert in 
seinem Fall nun mal Radianten und wenn man die im Dreisatz mit den Grad 
aus der Bogenlängenberechnung mischt, .....


Edit:
Ist ja sogar in dem von dir verlinkten Wiki-Artikel vermerkt.

von Michael (Gast)


Lesenswert?

Milan M. schrieb:
> ok, kannst mir bitte ein beispiel machen.

Bitte schön:
1
Orte            
2
                  Lat          Lon   
3
            
4
P1    dddmm.mmmm  4500.0000    00800.0000  
5
      deg min     45  0        8  0
6
      deg         45,0000000   8,0000000  
7
      rad         0,7853981634 0,1396263402  
8
            
9
P2    dddmm.mmmm  4510.0000    00810.0000  
10
      deg min     45  10       8  10
11
      deg         45,1666667   8,1666667  
12
      rad         0,7883070455 0,1425352222  
13
            
14
Mittelbreite  lat_m  deg  45,0833333      
15
              cos(d_lat)   0,7060775885  
16
            
17
Pythagoras            
18
  d_lat, d_lon  deg  0,1666667    0,1666667  
19
  d_lat         rad  0,00290888   0,0029088821  
20
  dy, dx        rad  0,0029088821 0,0020538964  
21
  dy, dx        km   18,532       13,085  
22
  dy, dx        m    18532,488    13085,374  
23
  dist          km   22,687      
24
  dist          m    22686,563      
25
            
26
Großkreis Kugel            
27
  dist0        0,5014523236      
28
  dist1        0,4985413364      
29
  bogen        0,0035609089      
30
  dist  km     22,687      
31
  dist  m      22686,551      
32
            
33
Differenz zwischen Großkreis und Pythagoras           
34
        m      0,012

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Denn der acos liefert in
> seinem Fall nun mal Radianten und wenn man die im Dreisatz mit den Grad
> aus der Bogenlängenberechnung mischt, .....

Äpfel und Birnen muss man schon sauber auseinander halten.
Darum sollte man immer die Einheiten ranschreiben und sieht dann sofort, 
dass die Umrechnung von Grad in Bogenmaß ((2*M_PI* ...)/360) natürlich 
Unfug ist, wenn der rechte Teil der Formel das Ergebnis schon im 
Bogenmaß liefert ;-)

von Milan M. (milance)


Lesenswert?

Michael schrieb:
> Milan M. schrieb:
>> ok, kannst mir bitte ein beispiel machen.
>
> Bitte schön:Orte
>                   Lat          Lon
>
> P1    dddmm.mmmm  4500.0000    00800.0000
>       deg min     45  0        8  0
>       deg         45,0000000   8,0000000
>       rad         0,7853981634 0,1396263402
>
> P2    dddmm.mmmm  4510.0000    00810.0000
>       deg min     45  10       8  10
>       deg         45,1666667   8,1666667
>       rad         0,7883070455 0,1425352222
>
> Mittelbreite  lat_m  deg  45,0833333
>               cos(d_lat)   0,7060775885
>
> Pythagoras
>   d_lat, d_lon  deg  0,1666667    0,1666667
>   d_lat         rad  0,00290888   0,0029088821
>   dy, dx        rad  0,0029088821 0,0020538964
>   dy, dx        km   18,532       13,085
>   dy, dx        m    18532,488    13085,374
>   dist          km   22,687
>   dist          m    22686,563
>
> Großkreis Kugel
>   dist0        0,5014523236
>   dist1        0,4985413364
>   bogen        0,0035609089
>   dist  km     22,687
>   dist  m      22686,551
>
> Differenz zwischen Großkreis und Pythagoras
>         m      0,012

Kannst Du mir biite erklören, wie Du die Werte gerechnet hast? formel
Pythagoras
  d_lat, d_lon  deg  0,1666667    0,1666667
  d_lat         rad  0,00290888   0,0029088821
  dy, dx        rad  0,0029088821 0,0020538964
Danke im voraus

von Milan M. (milance)


Lesenswert?

OK ich habe es geschnalt! :-)
DANKE

von Karl H. (kbuchegg)


Lesenswert?

Milan M. schrieb:

> Kannst Du mir biite erklören, wie Du die Werte gerechnet hast? formel
> Pythagoras

Den berühmt berüchtigten Phthagoras kennst du?

   c^2 = a^2 + b^2

gültig im rechtwinkeligen Dreieck

         +
         |\
         | \
      a  |  \
         |   \  c
         |    \
         |     \
         +------+
            b


D.h. hast du 2 Orte


          P1 +





                   + P2

und willst du die 'Distanz' zwischen beiden

          P1 +
              \
               \
                \  dist
                 \
                  \
                   + P2

dann ergänzt du zum rechtwinkeligen Dreieck

          P1 +
             |\
             | \
             |  \  dist
             |   \
             |    \
             ------+ P2

und berechnst dir einfach die Differenzen der Punktkoordinaten

          P1 +
             |
             |
          dy |
             |
             |
             ------+ P2
               dx


denn daraus kannst du dir mit dem Phythagoras wieder die 'direkte 
Distanz' errechnen.
Und ... das ganze funktioniert auch dann, wenn sich hinter x und y nicht 
irgendwelche Meter-Koordinaten verstecken, sondern wenn das Gradangaben 
sind. Die Distanz, die sich dann ergibt, ist dann eben die 
"Winkeldistanz" zwischen den beiden Punkten.
Für kleine Distanzen und 'moderate Breitengraden' funktioniert das auf 
der Erdkugel, weil die Verzerrung durch die Kugelgestalt zu klein ist. 
Das rechtwinkelige Dreieck ist nach wie vor ein gut genuges 
rechtwinkeliges Dreieck, zumal ja der Erdradius  (der in die Verzerrung 
eingeht) konkret nicht auf den Millimeter genau stimmt, deine Positionen 
nicht auf Hunderstel Winkelsekunden genau sind und da dir Erde keine 
polierte Kugel ist, hast du auch noch durch die Höhendifferenz der 
Punkte einen Fehler in der linearen Distanz der Punkte, die allesamt 
nicht in die Berechnung eingehen. ISt also, wie gezeigt, der Fehler 
durch den Phythagors bei 22km Distanz nur 12 Zentimeter und sind die 
anderen Fehler in Summe größer, dann kannst du den Fehler durch die 
vereinfachte Rechnung ignorieren. Bei einem Flug übere den Atlantik 
sieht die Sache anders aus, aber bei einer Distanz von 22km in unseren 
Breitengraden, spielen diese 12 Zentimeter nicht die dominierende Rolle.

von Michael (Gast)


Lesenswert?

Milan M. schrieb:
> Pythagoras

Differenzen von lat1-lat2 bzw. lon1-lon2
>   d_lat, d_lon  deg  0,1666667    0,1666667

Umrechnung in Bogenmaß (* pi/180°)
>   d_lat         rad  0,00290888   0,0029088821

dy = d_lat * R bzw. dx = d_lon * cos(Mittelbreite) * R
>   dy, dx        rad  0,0029088821 0,0020538964

mit cos(Mittelbreite) = cos ((lat1+lat2)/2 = 0,7060775885

Alles gerechnet mit Erdradius R=6371 km

von Michael (Gast)


Lesenswert?

Michael schrieb:
> dy = d_lat * R bzw. dx = d_lon * cos(Mittelbreite) * R
>>   dy, dx        rad  0,0029088821 0,0020538964

Sorry, das war ein Schritt zu weit:

richtig:
dy = d_lat bzw. dx = d_lon * cos(Mittelbreite)
>   dy, dx        rad  0,0029088821 0,0020538964

Mit den dy und dx wird dann die Formel von Pythagoras gefüttert und das 
Ergebnis mit dem Erdradius vom Bogenmaß in Bogenlänge (=Entfernung) 
umgerechnet.

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

hier noch meine Version für gcc im Anhang :-)

von Hier (Gast)


Lesenswert?

GPS schrieb:
> http://www.u-blox.com/en/gps-modules/neo-6p-/neo-6p.html
>
> High precision of < 1 m
>
> Positionierungsgenauigkeit liegt durchschnittlich bei 0,4m.
> Bei längerer Messdauer lässt sich die Genauigkeit mit etwas Rechnerei
> auf ca 6cm steigern.

The maximum improvement of positioning accuracy is reached with PPP+SBAS 
and can only be expected in an environment with unobstructed sky view 
during a period in the order of minutes.

von GPS (Gast)


Lesenswert?

Hier schrieb:
> The maximum improvement of positioning accuracy is reached with PPP+SBAS
> and can only be expected in an environment with unobstructed sky view
> during a period in the order of minutes.

Mit entsprechend guter Präzisionsantenne, ist auch bebautes Gelände 
nicht problematisch. Man bleibt auch hier gut unter einem Meter Drift.
Der Empfänger ist auch vor allem für Baufahrzeuge oder zur 
landwirtschaftlichen Nutzung gedacht. Im Wald oder in der Großstadt ist 
die Drift höher - aber immer noch unter 2m.

von Milan M. (milance)


Lesenswert?

Michael schrieb:
> Michael schrieb:
>> dy = d_lat * R bzw. dx = d_lon * cos(Mittelbreite) * R
>>>   dy, dx        rad  0,0029088821 0,0020538964
>
> Sorry, das war ein Schritt zu weit:
>
> richtig:
> dy = d_lat bzw. dx = d_lon * cos(Mittelbreite)
>>   dy, dx        rad  0,0029088821 0,0020538964
>
> Mit den dy und dx wird dann die Formel von Pythagoras gefüttert und das
> Ergebnis mit dem Erdradius vom Bogenmaß in Bogenlänge (=Entfernung)
> umgerechnet.

Hallo Michael
es funktioniert. Besten dank

von Purzel H. (hacky)


Lesenswert?

Allenfalls sollte man sich auch mit dem Datenformat bescheftigen. Float 
als 32bit Single bringt 5-6dezimale Stellen. 64bit Double bringt 15-16 
dezimale Stellen, und 80bit Extended bringen bis zu 18 Stellen. Dazu ist 
noch anzumerken, dass gewisse Controller Libraries 32bit Single anstelle 
von 64bit Double verwenden.

von Molarex (Gast)


Lesenswert?

Zur Präzision der GPS-bestimmten Position: häufig wird die vom GPS 
ausgegebene Auflösung (HDOP = Horizontal Dilution of Position) mit der 
Genauigkeit der Position verwechselt. Jedem, der an die zitierten 1-2m 
Abweichung glaubt, empfehle ich, ein GPS-Gerät auf die Fensterbank zu 
legen und mal 2 Stunden die angezeigte Position zu verfolgen, z.B. mit 
Visual GPS. Auch nach dem Abschalten der künstlichen 
Signalverschlechterung im zivilen Band kommen noch Abweichungen von 15m 
und mehr vor - nur für kurze Zeit; aber man kann nie wissen, ob die 
eigene Messung nicht gerade zu dieser Zeit erfolgt. Die Abweichung sind 
auch durch Mittelung über Minuten nicht zu verringern. Sieht man sich 
an, wo das eigene GPS-Gerät in den vergangenen Stunden überall gewesen 
sein will, wird man doch nachdenklich ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.