Distanz zwischen zwei Koordinaten berechnen

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Hermann.

    Distanz zwischen zwei Koordinaten berechnen

    Ich verwende einen VB Code um aus 2 NMEA Koordinaten die Distanz zu berechnen.
    Das ganze funktioniert auch sehr gut. Jetzt habe ich zwei Koordinaten, wo ich aber einen viel zu großen Wert bekomme.

    Die Koordinaten lauten:
    Breite start: 46.999913
    Länge start: 15.492768

    Breite Ende: 47.000023
    Länge Ende: 15.492642

    Wenn ich diese Zahlen z.B. mit der Webseite mountainbiker.ch/inhalt/distanz-berechnen/aWQ9MTEz.html berechne, bekomme ich als Ergebnis: 0.01832998357263285 km, das auch stimmt.

    Wenn ich diese Zahlen aber mit meinem VB Code berechne, bekomme ich 44,54 km heraus. Andere Koordinaten funktionieren ohne Probleme und decken sich mit den Ergebnissen der Internetseite.

    Hier der Code den ich verwende:


    '/// Beginn Code
    Option Explicit

    Public Function GetDistance _
    (Latitude1 As Double, _
    Longitude1 As Double, _
    Latitude2 As Double, _
    Longitude2 As Double _
    ) As Double

    Dim Lat1 As Double
    Dim Lat2 As Double
    Dim Lon1 As Double
    Dim Lon2 As Double

    Lat1 = Deg2Rad(Latitude1)
    Lat2 = Deg2Rad(Latitude2)
    Lon1 = Deg2Rad(Longitude1)
    Lon2 = Deg2Rad(Longitude2)

    GetDistance = _
    ArcCos(Sin(Lat1) * Sin(Lat2) _
    + Cos(Lat1) * Cos(Lat2) _
    * Cos(Lon2 - Lon1)) * 6378.388
    End Function

    Public Function DezimalGrad _
    (Grad As Double, _
    Min As Double, _
    Sec As Double _
    ) As Double

    DezimalGrad = Grad + Min / 60 + Sec / 3600
    End Function

    Public Function ArcCos(X As Double) As Double
    ArcCos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
    End Function

    Public Function Deg2Rad _
    (AngleDegrees As Double) As Double

    Deg2Rad = AngleDegrees * Pi / 180
    End Function

    Public Function Pi() As Double
    Pi = 4 * Atn(1)
    End Function
    ' \\\ Ende Code

    Hoffe da kann mir jemand weiterhelfen, wo da mein Problem liegen könnte.

    Vielen Dank für jede Antwort
    nimm doch einfach die Funktion aus der Website...:P

    Visual Basic-Quellcode

    1. Dim eradius As Double = 6378.137
    2. Dim distanz As Double = Math.acos(Math.sin(b_lat/180*Math.PI)*Math.sin(a_lat/180*Math.PI) + Math.cos(b_lat/180*Math.PI)*Math.cos(a_lat/180*Math.PI)*Math.cos(b_long/180*Math.PI-a_long/180*Math.PI) ) * eradius

    a_lat = Latitude1
    a_long = Longitude1
    b_lat = Latitude2
    b_long = Longitude2

    ich hoffe ich konnte helfen ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hi!



    Habe nun folgendes verwendet:

    Visual Basic-Quellcode

    1. Public Function entfernung(a_lat As Double, a_long As Double, b_lat As Double, b_long As Double) As Double
    2. Dim eradius As Double
    3. Dim distanz As Double
    4. eradius = 6378.137
    5. entfernung = ArcCos(Math.Sin(b_lat / 180 * 4 * Atn(1)) * Math.Sin(a_lat / 180 * 4 * Atn(1)) + Math.Cos(b_lat / 180 * 4 * Atn(1)) * Math.Cos(a_lat / 180 * 4 * Atn(1)) * Math.Cos(b_long / 180 * 4 * Atn(1) - a_long / 180 * 4 * Atn(1))) * eradius
    6. End Function


    Bekomme aber leider das selbe Ergebnis.

    Hoffe da kann mi nochmals jemand weitehelfen.

    Vielen Dank fü jede Antwort
    warum nimmst du immer 4 * Atn(1) statt einfach Math.PI, der Code dort sollte vollständig funktionieren...und die Funktion ArcCos entspricht Math.Acos...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Sorry, ich habe da falsche Angaben gemacht.

    Die richtigen Koordinaten lauten aus dem nmea File:

    $GPRMC,180050.231,A,4659.9948,N,01529.5661,E,29.64,321.57,050610,,*3F
    $GPGGA,180051.231,4700.0014,N,01529.5585,E,1,08,0.8,385.3,M,43.7,M,0.0,0000*76
    $GPGSA,A,3,31,30,04,14,12,29,09,02,,,,,1.9,0.8,1.6*36
    $GPRMC,180051.231,A,4700.0014,N,01529.5585,E,29.52,321.76,050610,,*35

    Daraus ergibt sich aus der ersten Zeile die Start-Daten:

    Breite: 46.599948
    Länge: 15.295661

    und aus der letzten Zeile das Ziel:

    Breite: 47.000014
    Länge: 15.295585

    Wenn ich nun diese Daten mit dem Internetlink http://www.mountainbiker.ch/inhalt/dista…n/aWQ9MTEz.html berechne und mit meinem VB Programm vergleiche komme ich immer auf ca. 42km.

    Dies kann aber nicht sein, da ich nur 1 Sekunde mit dem Auto unterwegs war, wie man aus dem NMEA File erkennen kann.

    Vielleicht hat da noch jemand einen Rat, oder kann es am Datenlogger liegen!
    versteh ich das richtig:
    du hast 2 Punkte, die jeweils mit ner X- und ner Y-Koordinate angegeben sind?

    Wenn ja, warum macht ihr das nicht mit dem Satz des Pytagoras?
    Wenn nein, wie ist das gemeint?

    Gruß, Hermann

    Edit by ErfinderDesRades: Die Frage ist sicher nicht mehr aktuell.
    --> closed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()