- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: Berechnung Distanz zwischen LAT / LON Koordinaten

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    42
    Beiträge
    318

    Berechnung Distanz zwischen LAT / LON Koordinaten

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    mit nachfolgendem Code berechne ich die Distanz zwischen 2 Koordinaten. Das funktioniert auch gut, sobald die Distanz unter 1000m liegt. Wenn die Distanz über 1000m liegt bekomme ich kein vernünftiges Ergebnis wie z.B. 1.299939393e3.

    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    $baud = 9600
    $swstack = 64
    $hwstack = 64
    $framesize = 32
    
    $sim
    
    Declare Sub Calc_all
    Declare Sub Calc_radiants
    Declare Sub Calc_angles
    Declare Sub Calc_distance
    
    Dim Lon_a As Double                                                                             'longitude base (deg)
    Dim Lat_a As Double                                                                             'latitude base (deg)
    Dim Lon_b As Double                                                                             'longitude air (deg)
    Dim Lat_b As Double                                                                             'latitude air (deg)
    Dim Lon_a_rad As Double                                                                         'longitude base (radiant)
    Dim Lat_a_rad As Double                                                                         'latitude base (radiant)
    Dim Lon_b_rad As Double                                                                         'longitude air (radiant)
    Dim Lat_b_rad As Double                                                                         'latitude air (radiant)
    Dim Angle_azi As Double                                                                         'Angle azimuth
    Dim Angle_ele As Double                                                                         'Angle elevation
    Dim Distance As Double                                                                          'tmp distance
    Dim Distance_m_2d As Double                                                                     'Distance 2D in meters
    Dim Distance_m_3d As Double                                                                     'Distance 3D in meters
    Dim Altitude As Double                                                                          'Altitude over ground
    Const Earthradiuskm = 6378.137                                                                  'Const for earth radius
    
    Dim Tmp_double(4) As Double                                                                     'tmp variable
    
    
    '### Main Loop ####
    Main:
    
    	Lat_a = 49.394882	
    	Lon_a = 8.389916
    	Lat_b = 49.394938
    	Lon_b = 8.401187
    	Altitude = 200
    	Call Calc_all
    	Print "Distanz: " ; Distance_m_2d ; "m" ; " in 3D: " ; Distance_m_3d ; "  Grad Azi: " ; Angle_azi ; " Grad Ele: " ; Angle_ele
    
    
    Goto Main
    
    '#### Subs ###
    Sub Calc_radiants                                                                               'convert degree to radiant
       Lon_a_rad = Deg2rad(lon_a)
       Lat_a_rad = Deg2rad(lat_a)
       Lon_b_rad = Deg2rad(lon_b)
       Lat_b_rad = Deg2rad(lat_b)
    End Sub
    
    Sub Calc_distance                                                                               'calculate distances 2D and 3D
       'calc distance 2D
       Tmp_double(4) = Sin(lat_a_rad)
       Tmp_double(3) = Sin(lat_b_rad)
       Tmp_double(1) = Tmp_double(4) * Tmp_double(3)
       Tmp_double(4) = Cos(lat_a_rad)
       Tmp_double(3) = Cos(lat_b_rad)
       Tmp_double(2) = Lon_b_rad - Lon_a_rad
       Tmp_double(2) = Cos(tmp_double(2))
       Tmp_double(4) = Tmp_double(4) * Tmp_double(3)
       Tmp_double(4) = Tmp_double(4) * Tmp_double(2)
       Tmp_double(1) = Tmp_double(1) + Tmp_double(4)
       Distance = Acos(tmp_double(1))
       Tmp_double(1) = Distance * Earthradiuskm
       Distance_m_2d = Tmp_double(1) * 1000
       'calc distance 3D
       Tmp_double(4) = Distance_m_2d * Distance_m_2d
       Tmp_double(3) = Altitude * Altitude
       Tmp_double(1) = Tmp_double(3) + Tmp_double(4)
       Distance_m_3d = Sqr(tmp_double(1))
    End Sub
    
    Sub Calc_angles                                                                                 'calculate angles
       'Azimuth angle
       Tmp_double(1) = Sin(lat_b_rad)
       Tmp_double(2) = Sin(lat_a_rad)
       Tmp_double(3) = Cos(distance)
       Tmp_double(2) = Tmp_double(2) * Tmp_double(3)
       Tmp_double(1) = Tmp_double(1) - Tmp_double(2)
       Tmp_double(2) = Cos(lat_a_rad)
       Tmp_double(3) = Sin(distance)
       Tmp_double(2) = Tmp_double(2) * Tmp_double(3)
       Tmp_double(1) = Tmp_double(1) / Tmp_double(2)
       Tmp_double(1) = Acos(tmp_double(1))
       Angle_azi = Rad2deg(tmp_double(1))
       If Lon_a > Lon_b Then
          Angle_azi = 360.0 - Angle_azi
       End If
       'Elevation angle
       Tmp_double(1) = Altitude / Distance_m_2d
       Tmp_double(1) = Atn(tmp_double(1))
       Angle_ele = Rad2deg(tmp_double(1))
    End Sub
    
    Sub Calc_all                                                                                    'Do all calculations, set lat and lon's before..
       Call Calc_radiants
       Call Calc_distance
       Call Calc_angles
    End Sub
    
    End
    Die Frage ist jetzt warum ? Liegt das an einer Variablendeklaration ?

    Gruß Kay
    ...::: AVRFreak :::...

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Was ist an
    1.299939393e3
    unvernünftig?

    BTW, macht es bei so kurzen Entfernungen überhaupt Sinn, so kompliziert zu rechnen? Sind da die allfälligen Fehler in den Koordinaten nicht viel größer als der Umstand, daß die Erde eine Kugel mit einem Umfang von ca. 40 000 000 m ist?

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    42
    Beiträge
    318
    Zitat Zitat von Klebwax Beitrag anzeigen
    Was ist an unvernünftig?

    BTW, macht es bei so kurzen Entfernungen überhaupt Sinn, so kompliziert zu rechnen? Sind da die allfälligen Fehler in den Koordinaten nicht viel größer als der Umstand, daß die Erde eine Kugel mit einem Umfang von ca. 40 000 000 m ist?

    MfG Klebwax
    Hallo Klebwax,

    vernünftig wäre für mich ein Ergebnis wie z.B. 1299m. Natürlich kann ich auch mit dem 1.29993939e3 rechnen, aber ich hätte es halt gerne anders dargestellt.

    Wie würdest Du es denn rechnen ?

    Gruß Kay
    ...::: AVRFreak :::...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Etwas stimmt sicher nicht. Google Earth hat die Distanz zwischen diesen Koordinaten als ungefähr 850 berechnet. Ich kenne mich mit Bascom nicht aus. Vielleicht ist den Double Genauigkeit doch nicht so genau. Sende den Resultaten der Zwischenberechnung zum pc, und vergleiche das mit deine eigene Berechnungen mit zbs Windows Calculator.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    42
    Beiträge
    318
    Zitat Zitat von Valen Beitrag anzeigen
    Etwas stimmt sicher nicht. Google Earth hat die Distanz zwischen diesen Koordinaten als ungefähr 850 berechnet. Ich kenne mich mit Bascom nicht aus. Vielleicht ist den Double Genauigkeit doch nicht so genau. Sende den Resultaten der Zwischenberechnung zum pc, und vergleiche das mit deine eigene Berechnungen mit zbs Windows Calculator.
    Hallo Valen,

    doch es stimmt Bascom wirft mir 816m aus. Das habe ich auch so ~ in Google Maps gemessen. Die 1.299939393e3m waren nur ein Beispiel für Strecken über 1000m.

    Gruß Kay
    ...::: AVRFreak :::...

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Ok, dann habe ich dein Bericht falsch verstanden. Ich habe das gelesen als ob du 1.3km bekommen hat wenn es unter 1km sein soll.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    42
    Beiträge
    318
    Hallo zusammen,

    ich habe eine Lösung gefunden. Ich konvertiere die Double Variable zu einer Single Variable. Jetzt bekomme ich z.B. 1200m angezeigt.

    Gruß Kay
    ...::: AVRFreak :::...

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von BlaueLed Beitrag anzeigen
    vernünftig wäre für mich ein Ergebnis wie z.B. 1299m. Natürlich kann ich auch mit dem 1.29993939e3 rechnen, aber ich hätte es halt gerne anders dargestellt.
    Also ist das Ergebniss schon vernünftig. Double ist nun mal ne wissenschaftliche Einheit, da ist diese Darstellung üblich.

    Man kann natürlich seinen Rechner auch damit beschäftigen, alles in Double auzurechnen, um dann die Häfte der Stellen nach /dev/null zu senden und nur Single auszugeben.

    Ich gehe mal davon aus, daß die Koordinaten vom GPS stammen, also bestenfalls auf +- 5m genau sind. Eigentlich sollte deine Entfernung als 1,3km angezeigt werden, besser ist das Ergebniss nicht wirklich.

    Ich bin jetzt zu faul, eine Formel für die Entfernung von zwei Punkten für Abstände von einem Bogengrad oder kleiner aufzustellen, aber ein paar Hinweise will ich geben.

    Der Abstand der Breitenkreise auf der Erdkugel ist konstant. Eine Bogenminute entspricht einer Strecke von einer Seemeile bzw. 1852 Meter. Der Abstand der Längenkreise hängt von der Breite ab. An den Polen ist er Null, am Äquator ist die Bogenminute ebenfalls eine Seemeile. Für einen gegebenen Breitenkreis kann man den Wert eines Längengrades (oder einer Minute) errechnen (oder irgendwo im Internet finden). So kann man aus den Winkeln kartesische Koordinaten durch einfaches Multiplizieren berechnen. Dann noch etwas Phytagoras und der Abstand ist bestimmt. Das ganze dann noch als Integer, schneller und wirklich genauer wirds nicht.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    42
    Beiträge
    318
    Zitat Zitat von Klebwax Beitrag anzeigen
    Also ist das Ergebniss schon vernünftig. Double ist nun mal ne wissenschaftliche Einheit, da ist diese Darstellung üblich.

    Man kann natürlich seinen Rechner auch damit beschäftigen, alles in Double auzurechnen, um dann die Häfte der Stellen nach /dev/null zu senden und nur Single auszugeben.

    Ich gehe mal davon aus, daß die Koordinaten vom GPS stammen, also bestenfalls auf +- 5m genau sind. Eigentlich sollte deine Entfernung als 1,3km angezeigt werden, besser ist das Ergebniss nicht wirklich.

    Ich bin jetzt zu faul, eine Formel für die Entfernung von zwei Punkten für Abstände von einem Bogengrad oder kleiner aufzustellen, aber ein paar Hinweise will ich geben.

    Der Abstand der Breitenkreise auf der Erdkugel ist konstant. Eine Bogenminute entspricht einer Strecke von einer Seemeile bzw. 1852 Meter. Der Abstand der Längenkreise hängt von der Breite ab. An den Polen ist er Null, am Äquator ist die Bogenminute ebenfalls eine Seemeile. Für einen gegebenen Breitenkreis kann man den Wert eines Längengrades (oder einer Minute) errechnen (oder irgendwo im Internet finden). So kann man aus den Winkeln kartesische Koordinaten durch einfaches Multiplizieren berechnen. Dann noch etwas Phytagoras und der Abstand ist bestimmt. Das ganze dann noch als Integer, schneller und wirklich genauer wirds nicht.

    MfG Klebwax
    Moin,

    ich gebe Dir da in allen Punkten recht.

    Gruß Kay
    ...::: AVRFreak :::...

Ähnliche Themen

  1. zwischen Koordinaten Winkel ausrechnen
    Von toter_fisch im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 22.05.2013, 16:21
  2. Call of Duty 4 : Modern Warfare gegnerische Koordinaten
    Von Che Guevara im Forum Software, Algorithmen und KI
    Antworten: 7
    Letzter Beitrag: 11.02.2010, 20:34
  3. [ERLEDIGT] Atan2 problem bei kartesichen Koordinaten und Zielwinkel
    Von Ritchie im Forum Software, Algorithmen und KI
    Antworten: 4
    Letzter Beitrag: 18.09.2008, 08:11
  4. roboterarm koordinaten bestimmen
    Von nonoboy im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 5
    Letzter Beitrag: 17.07.2008, 12:40
  5. 4 Drucksensoren zur XY-Koordinaten-Bestimmung
    Von oelias im Forum Sensoren / Sensorik
    Antworten: 7
    Letzter Beitrag: 16.05.2007, 20:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus