• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Berechnung Abstand zwischen zwei Koordinaten

Avhy

Geonewbie
Hallo erstmal :roll:

Ich habe mich eben hier neu angemeldet und hoffe, ich finde hier jemanden, der mir weiterhelfen kann. :/

Erstmal - mit Geocaching hab ich - bisher - nichts am Hut. Vielleicht kann man sich hier infizieren? :D

Mein persönliches Geocaching besteht eigentlich darin, Plätze deren Koordinaten ich habe, mit dem Wohnmobil anzufahren :roll:
Sprich: Auch Wohnmobilfahrer haben Listen mit Koordinaten von Übernachtungsplätzen, und die gilt's zu finden. Also unser gesuchtes Ziel ist einfach etwas größer und leichter optisch auszumachen ;) Ansonsten ist's sicher ein bißl ähnlich....

Nun hatte ich schon das Problem, daß die Koordinaten nicht stimmten - und ich gerne wissen wollte, wieviel die Koordinaten von meinem tatsächlichen Standort abweichen, um die Information in den Listen anpassen zu können (falls es sich lohnt...) - letztesmal waren's geschätzt 500m Luftlinie, mehrere Straßen & ein Fluß entfernt..... Für mein Navi natürlich unauffindbar.

Da ich auf der andern Seite ein bißl Übung im Programmieren brauche, habe ich mir ein kleines Programm geschrieben, mit dem ich Grad/Min/Sek in dezimale Koordinaten umrechnen kann.

Und nun möchte ich die dezimale Koordinaten Soll/Ist vergleichen. Ich dachte mir, einmal die N/S-Abweichung und einmal die E/W-Abweichung auszurechnen. Und dann müsste ich doch mittels Pytagoras (schreibt man den so?) die Luftlinie ausrechnen können. Oder kenne ich mich da doch zu wenig aus und denke was total verkehrtes? was meint Ihr?

Naja - und dann sollte ich halt wissen, wie ich zwischen zwei Koordinaten (z.B. N ....), die ich dezimal vorliegen habe, einen Abstand in Meter ausrechnen kann.

Könnt Ihr mir da weiterhelfen? :???:

Danke & Grüße, Avhy.
 

kiozen

Geomaster
Code:
// from http://www.movable-type.co.uk/scripts/LatLongVincenty.html
double distance(const XY& p1, const XY& p2, double& a1, double& a2)
{
    double cosSigma = 0.0;
    double sigma = 0.0;
    double sinAlpha = 0.0;
    double cosSqAlpha = 0.0;
    double cos2SigmaM = 0.0;
    double sinSigma = 0.0;
    double sinLambda = 0.0;
    double cosLambda = 0.0;

                                 // WGS-84 ellipsiod
    double a = 6378137.0f, b = 6356752.3142f,  f = 1.0f/298.257223563f;
    double L = p2.u - p1.u;

    double U1 = atan((1-f) * tan(p1.v));
    double U2 = atan((1-f) * tan(p2.v));
    double sinU1 = sin(U1), cosU1 = cos(U1);
    double sinU2 = sin(U2), cosU2 = cos(U2);
    double lambda = L, lambdaP = (double)(2*PI);
    unsigned iterLimit = 20;

    while ((fabs(lambda - lambdaP) > 1e-12) && (--iterLimit > 0)) {
        sinLambda = sin(lambda);
        cosLambda = cos(lambda);
        sinSigma = sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda));

        if (sinSigma==0) {
            return 0;            // co-incident points
        }

        cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;
        sigma = atan2(sinSigma, cosSigma);
        sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;
        cosSqAlpha = 1 - sinAlpha * sinAlpha;
        cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSqAlpha;

        if (isnan(cos2SigmaM)) {
            cos2SigmaM = 0;      // equatorial line: cosSqAlpha=0 (6)
        }

        double C = f/16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha));
        lambdaP = lambda;
        lambda = L + (1-C) * f * sinAlpha * (sigma + C*sinSigma*(cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));
    }
    if (iterLimit==0) return 0;  // formula failed to converge

    double uSq = cosSqAlpha * (a*a - b*b) / (b*b);
    double A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));
    double B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));
    double deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));
    double s = b*A*(sigma-deltaSigma);

    a1 = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * 360 / TWOPI;
    a2 = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda) * 360 / TWOPI;
    return s;
}

... oder so ähnlich


Oliver
 
OP
A

Avhy

Geonewbie
Supi - ich danke euch! :up:

Nicht, daß ich das alles jetzt auf Anhieb verstanden hätte :???: Aber das mit der Linie auf der Kugel hat mich auch schon ein paar Erkenntnisse weitergebracht :gucker2:

Die Beschreibung bei Wikipedia ist gut. Und vor allem voller Mathematik. Mal schauen, ob ich mich da durchknuddeln kann. :buch: :buch:

Grüße & nochmal Dankeschön!
Angy. :computer:
 

jmsanta

Geoguru
Avhy schrieb:
[...]
Die Beschreibung bei Wikipedia ist gut. Und vor allem voller Mathematik. [...]
verzeih mir, aber das ist noch nicht Mathematik, sondern nur Rechnen mit relativ einfachen, fertigen Formeln, die über Winkelfunktionen nicht hinaus gehen. - Die lassen sich bequem in Excel umsetzen....

Viel Spaß bei der Lektüre
 

ElefantenKuh

Geocacher
abgesehen von deinem interesse ein programm zur berechnung der entfernung zu schreiben, würde ich mir persönlich eher die situation in GE anschauen und dann entscheinden ob es sinnvoll ist die koordinaten zu ändern.
die absolute entfernung der beiden punkte sagt ja nicht zwandsweise etwas darüber aus, ob die koordinaten nicht passen (z.b. bei großen parkplätzen).


übrigens kann man wohnmobilfahren und cachen gut kombinieren ;)
 
A

Anonymous

Guest
jmsanta schrieb:
verzeih mir, aber das ist noch nicht Mathematik, sondern nur Rechnen mit relativ einfachen, fertigen Formeln, die über Winkelfunktionen nicht hinaus gehen. - Die lassen sich bequem in Excel umsetzen....
Genau so ist es!

Noch zwei kleine Anmerkungen:

1. Kann man doch die Entfernung zwischen zwei Koordinaten auch vom GPS ermitteln lassen, zur not über die Routenfunktion.

2. Hier ein Link, falls die Entfernungen mal größer sind: http://www.aeroplanner.com/calculators/avcalcrhumb.cfm

GermanSailor

P.S. Pythagoras schreibt man so: ?????????
 
Oben