Laden...

Abstand zwischen zwei Punkten berechnen: Python Sample in C# umgesetzt aber untersch. Ergebnis

Erstellt von Leonie96 vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.001 Views
L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren
Abstand zwischen zwei Punkten berechnen: Python Sample in C# umgesetzt aber untersch. Ergebnis

Hallo Leute,

ich habe folgendes Problem.

Und zwar möchte ich die Peilung zwischen zwei GPS Punkten ausrechnen.

Dafür habe ich sehr viel rechachiert und bin auf folgendes gestoßen:

Hierbei handelt es sich um Pythoncode.
Dieser soll den entsprechenden Winkel ausgeben.
Code für Peilung zwischen GPS Punkten

def haversine(lat1, lon1, lat2, lon2):

      R = 3959.87433 # this is in miles.  For Earth radius in kilometers use 6372.8 km

      dLat = radians(lat2 - lat1)
      dLon = radians(lon2 - lon1)
      lat1 = radians(lat1)
      lat2 = radians(lat2)

      a = sin(dLat/2)**2 + cos(lat1)*cos(lat2)*sin(dLon/2)**2
      c = 2*asin(sqrt(a))

      return R * c

print(haversine(lat1, lon1, lat2, lon2))

Diesen Code habe ich nun in C# übertragen.
Allerdings erhalte ich nicht das richtige Ergebnis wie ein Onlineumrechner. (Link zum Onlinerechner)

Mein umgewandelter C# Code:

public double haversine2( double lon1,double lat1,double lon2,double lat2)
        {
            //convert decimal degrees to radians 
            double lon11 = DegreesToRadianss(lon1);
            double lat11 = DegreesToRadianss(lat1);
            double lon22 = DegreesToRadianss(lon2);
            double lat22 = DegreesToRadianss(lat2);

    //haversine formula 
            double dlon = lon2 - lon1;
            double dlat = lat2 - lat1;

            double a = Math.Sin(dlat / 2) * Math.Sin(dlat / 2) + Math.Cos(lat1) * Math.Cos(lat2) *  Math.Sin(dlon / 2) * Math.Sin(dlon / 2);
            double c = 2 * Math.Asin(Math.Sqrt(a));
            double r = 6371;//# Radius of earth in kilometers. Use 3956 for miles
            return c * r;

        }

Laut Onlineumrechner soll bei folgenden Koordinaten ein Winkel von 263,8° oder 183,81° raus kommen. Jenachdem ob man zuerst lon oder lat eingibt.

double lat1 = 24.70053278;
double lon1 = 47.54109784;
double lat2 = 24.700073517333397;
double lon2 = 47.53644075239231;

Sieht zufällig jemand einen Fehler bei mir in der Konvertierung ?

Würde mich über Hilfe sehr freuen.

Liebe Grüße,

Leonie

16.827 Beiträge seit 2008
vor 5 Jahren
 R = 3959.87433 # this is in miles.  For Earth radius in kilometers use 6372.8 km
     double r = 6371;//# Radius of earth in kilometers. Use 3956 for miles
L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hey hey,

danke für die schnelle Antwort. Aber die Änderung auf r=6372.8 km hat auch keine Besserung zu Folge. Bin immernoch sehr weit von den Werten dieses Onlineumrechners entfernt.
Online Umrechner

Bringt mich echt zum verzweifeln. Jemand vielleicht noch eine Idee wo dran es liegen könnte ?

Liebe Grüße

C
2.121 Beiträge seit 2010
vor 5 Jahren

Die Reihenfolge der Parameter bei der Übergabe ist einmal
lat1, lon1, lat2, lon2
und einmal
lon1, lat1, lon2, lat2

Rufst du das auch angepasst auf?

Stimmt der Python Code, gibt der das gewünschte aus bzw. das selbe wie die Webseite?

M
368 Beiträge seit 2006
vor 5 Jahren

Vielleicht liefert die Umrechnung in diesem Beitrag von Codeproject einen Hinweis: haverside in C#. Oder man probiert -statt der manuellen Implementierung- einen python2csharp Converter

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉