Michael: Entfernung berechnet, über geo-koordinaten berechnen

Hi,

ich wollte fragen ob man aus 2 geo-koordinaten (also latitude und longitude) mittels pytagoras einfach den abstand (luftlinie) zw. 2 punkten ausrechnen kann und den ausgerechneten wert dann einfach in meter/kilometer umwandeln kann

oder stelle ich mir das zu einfach vor? die entfernungen werden im bereich von < 50 km sein, und nur im deutschen bundesgebiet - und wenn mal die berechnung bei 50 km um einen km daneben liegt (=2% abweichung) dann ist es auch nicht so schlimm

was ich noch brauchen würde hierbei wäre natürlich noch der umrechnungsfaktor für x Grad geo-abstand auf meter...

  1. @@Michael:

    ich wollte fragen ob man aus 2 geo-koordinaten (also latitude und longitude) mittels pytagoras einfach den abstand (luftlinie) zw. 2 punkten ausrechnen kann und den ausgerechneten wert dann einfach in meter/kilometer umwandeln kann

    So nicht, da ein Längengrad und ein Breitengrad unterschiedlich viele Kilometer bedeuten.

    Also erst Grad in Kilometer umrechnen, dann Pythagoras.

    Einem Breitengrad entsprechen etwa π ⋅ 12714 km / 360 ≈ 111 km.

    Einem Längengrad entsprechen etwa π ⋅ 12756 km ⋅ cos φ / 360 (φ – geografische Breite), in unseren Breiten (Berlin) also etwa 64.75 km.

    Im Übrigen werden Fragen zur Abstandsbestimmung auf einer Kugel hier im Forum häufig gestellt; du solltest im Archiv fündig werden.

    Live long and prosper,
    Gunnar

    --
    Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    1. Hallo Gunnar,

      danke für deine Antwort!

      Bei der suche nach der Länge der einzelnen Breitengrade die in Frage kommen würden, habe ich diese Seite gefunden: http://seanavigation.narod.ru/progi/degree.html

      Das entscheidende Code-Stück auf der Seite (verkürzt) ist :

      function deg2rad(deg)
        {
      conv_factor = (2.0 * Math.PI)/360.0;
      return(deg * conv_factor);
        }

      function rad2deg(rad)
        {
      conv_factor = 360/(2.0 * Math.PI);
      return(rad * conv_factor);
        }

      function log10(val)  // calculate the log base 10 of val
        { return(Math.LOG10E * Math.log(val)); }

      function compute(obj) // Compute lengths of degrees
        {
      // Convert latitude to radians
      lat = deg2rad(obj.deg.value);

      // Set up "Constants"  
      m1 = 111132.92;		// latitude calculation term 1  
      m2 = -559.82;		// latitude calculation term 2  
      m3 = 1.175;			// latitude calculation term 3  
      m4 = -0.0023;		// latitude calculation term 4  
      p1 = 111412.84;		// longitude calculation term 1  
      p2 = -93.5;			// longitude calculation term 2  
      p3 = 0.118;			// longitude calculation term 3  
      
      // Calculate the length of a degree of latitude and longitude in meters  
      latlen = m1 + (m2 \* Math.cos(2 \* lat)) + (m3 \* Math.cos(4 \* lat)) +  
      			(m4 \* Math.cos(6 \* lat));  
      longlen = (p1 \* Math.cos(lat)) + (p2 \* Math.cos(3 \* lat)) +  
      				(p3 \* Math.cos(5 \* lat));  
      

      }

      stimmt das so?

      1. @@Michael:

        danke für deine Antwort!

        Gerngeschehen. Hast du sie auch gelesen? Und verstanden?

        Bei der suche nach der Länge der einzelnen Breitengrade die in Frage kommen würden,

        Hä?

        Live long and prosper,
        Gunnar

        --
        Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
      2. Moin.

        stimmt das so?

        Sollte stimmen: Es handelt sich um diesen Algorithmus, wobei anscheinend ein anderes Referenzellipsoid gewählt wurde (daher die abweichenden Zahlenwerte).

        Christoph

    2. Moin.

      Einem Breitengrad entsprechen etwa π ⋅ 12714 km / [...]
      Einem Längengrad entsprechen etwa π ⋅ 12756 km [...]

      Hier sollte anstelle von Pol- und Äquatordurchmesser besser der mittlere Erdradius verwendet werden, wie man sich wie folgt am Modell des oblaten Spheroiden überlegt:

      Sei
      [latex]\phi[/latex] die geographische Breite (Normalenwinkel der Ellipse)
      [latex]\Phi[/latex] die geozentrische Breite (Polarwinkel der Ellipse)
      [latex]\lambda[/latex] die geographische Länge
      [latex]R[/latex] der geozentrische Radius (Abstand zum Mittelpunkt)
      [latex]r[/latex] der 'geographische' Radius (Länge der Normalen auf die Äquatorebene)
      [latex]s[/latex] die Bogenlänge
      [latex]a[/latex] die große Halbache der Ellipse (Äquatorradius)
      [latex]b[/latex] die kleine Halbachse der Ellipse (Polradius)

      Dann lautet das Linienelement

      [latex]ds^2 = r^2d\phi^2 + R^2\cos^2\Phi d\lambda^2[/latex]

      Die Radien [latex]r, R[/latex] können dabei alle Werte aus dem Intervall [latex][a,b][/latex] annehmen.

      Sollte ich micht nicht verrechnet haben (alle Angaben ohne Gewähr), dann lassen sich die benötigten Werte wie folgt bestimmen:

      [latex]\tan\Phi = (\frac ba)^2\tan\phi[/latex]
      [latex]R = b\sqrt{\frac{1 + \tan^2\Phi}{(\frac ba)^2 + \tan^2\Phi}}[/latex]
      [latex]R\cos\Phi = a\sqrt{\frac{R^2-b^2}{a^2-b^2}}[/latex]
      [latex]r = \frac b{\sin\phi}\sqrt{\frac{a^2-R^2}{a^2-b^2}}[/latex]

      Für kleine Winkel wird der Abstand zweier Punkte

      [latex]s \approx \sqrt{r^2(\Delta\phi)^2 + R^2\cos^2\Phi(\Delta\lambda)^2}[/latex]

      wobei für den in den Formeln auftretenden Wert [latex]\phi[/latex] das arithmetische Mittel der geographischen Breiten verwendet werden sollte.

      Im Falle der Kugel gilt [latex]r = R = const[/latex] und [latex]\phi = \Phi[/latex] und der Ausdruck vereinfacht sich zu

      [latex]s \approx R\sqrt{(\Delta\phi)^2 + \cos^2\phi(\Delta\lambda)^2}[/latex]

      Für große Abstände, bei denen es auf ein paar Kilometer nicht ankommt, würde ich die exakte Kugellösung empfehlen. Genauere Werte liefert die Formel von Vincenty.

      Christoph

      1. Moin.

        Die obige differentielle Lösung lässt sich noch weiter vereinfachen zu

        r = b²/√(b² + (a² - b²)·cos²φ)
            R·cosα = a²/√(a² + b²·tan²φ)

        Die Qualität der Ergebnisse unterliegt aber starken Schwankungen: Zum Vergleich der Genauigkeit der verschiedenen Algorithmen gibt's jetzt ein Entfernungsberechnungs-Skript.

        Neben Kugel- und differentieller Lösung enthält es die millimetergenaue Vincenty-Formel und eine Winkel-korrigierte Variante der Kugel-Approximation, die meiner Meinung nach recht brauchbare Ergebnisse liefert.

        Christoph

  2. Hallo Michael,

    eine Suche im Forums-Archiv hätte Dich auf einen Beitrag mit dem Title "Entfernungen berechnen" geführt, der erst ein paar Tage alt ist ... Dort ist auch eine URI angegeben, die Deine Frage beantworten dürfte.

    Grüße, luti