Formel: geogra. Koordianten -> Länge in Metern

HI!

irgendwo steht doch sicherlich die “offizielle” OSM-Formel für die Streckenberechnung aus geographischen Koordinaten.

Es geht mir auch um den angewandten Erdradius.

Kann mir mal wieder eine helfen ?

Gruß Jan :slight_smile:

Die “Offizielle” OSM-Formel kenne ich nicht.
Es gibt komplizierte Formeln der sphärischen Geometrie.
Aber die kann man regelmäßig getrost übergehen. Bei kleinen Abständen der Punkte (ein paar Kilometer, oder noch weniger wie in GPS tracks) transformiert man die Koordinaten einfach mal in die Ebene (111 km/Grad, im Falle der Länge noch mit dem Cosinus der Breite multipliziert), und nimmt dann den Pythagoras her. Die Abweichung liegt allenfalls im Prozentbereich, für die Praxis also meist irrelevant. Es sei denn, du willst Strecken wie Berlin-New York ausrechnen…

6371 km kann ich mir als Erdradius gerade noch merken, diesen muss man jedoch als “Mittelung” sehen,
da ja bekanntlich Rotationsellipsoide (mit kleiner und großer Halbachse) verwendet werden.

Hilfe! Im Internetzeitalter, und dann noch Cosinus bzw. Pythagoras? :wink:
Nimm
http://geographiclib.sourceforge.net/cgi-bin/Geod
und 10 nm (richtig, nano-meter) sind Dein Freund.

Vielleicht hilft die offizielle OpenLayers-Formel, mit Berücksichtigung zweier Erdradien.

Ich nehm in der Regel auch Cos(Breite) und Pythagoras. Meine kleine Welt ist so klein, dass sie praktisch eine Scheibe ist und selbst die grosse Welt ist bei mir bestenfallst eine Kugel.

Grüße, Max

Guten Morgen,

laut WIKI http://wiki.openstreetmap.org/wiki/DE:Karten_und_Kompasskunde#Karte_und_Koordinatensystem arbeitet OSM nach WGS84. Folglich sind die darin definierten Parameter maßgebend. http://de.wikipedia.org/wiki/World_Geodetic_System_1984.

Es ist ein Unterschied, ob ich den Erdradius nach dem Bessel-Ellipsoid, dem Krassowsky-Ellipsoid oder dem GRS80 ermittle, alle drei haben unterschiedliche Werte.

Hilfreich in diesen Fällen ist die EPSG-Datenbank: http://www.epsg.org/Geodetic.html

Sven

Ergänzung:

WGS84 hat eine große Halbachse von 6 378 137,0 m, eine Abplattung von 1:298,257223563.
Die große Halbachse ist im Prinzip als Radius von Erdmittelpunkt zum Äquator anzusehen. (die kleine Halbache wäre der Radius von Erdmittelunkt zu den Polen)

Hat mich jetzt doch beschäftigt, wie gross der Fehler ist, wenn man dummes cos(breitengrad) statt der Formel von Vincenty aus Openlayers nimmt.

Wenn man eine 10km Strecke in NO-Richtung am 40. Breitengrad misst, ist der Fehler 0.1%, also 10 Meter. Am Äquator sind es 0.33% also 30 Meter.

   I------------+--------------------------------------------+
   I            I        Länge der Strecke                   I   
   I Längengrad I  10m   I  100m  I  1000m I   10km I 100km  I   
   I------------+--------+--------+--------+--------+--------+   
   I     0      I +0.337 I +0.335 I +0.335 I +0.335 I +0.336 I   
   I    10      I +0.318 I +0.320 I +0.320 I +0.320 I +0.319 I   
   I    20      I +0.271 I +0.276 I +0.275 I +0.275 I +0.274 I   
   I    30      I +0.207 I +0.204 I +0.204 I +0.204 I +0.202 I   
   I    40      I +0.109 I +0.110 I +0.110 I +0.110 I +0.107 I   
   I    50      I -0.003 I  0     I  0     I -0.001 I -0.003 I   
   I    60      I -0.113 I -0.117 I -0.117 I -0.117 I -0.120 I
   I    70      I -0.221 I -0.226 I -0.226 I -0.226 I -0.227 I
   I    80      I -0.307 I -0.306 I -0.305 I -0.306 I -0.305 I
   I------------+--------+--------+--------+--------+--------+ 

(Gerechnet mit Erdumfang=40075016 und pi auf 7 Stellen genau in JavaScript, für den cosinus wurde der mittlere Längengrad zwischen den Endpunkten der Strecke genommen).

Bestimmt man die Länge einer reinen West-Ost-Linie, sieht das Ergebnis so aus:

   I------------+--------------------------------------------+
   I            I        Länge der Strecke                   I  
   I Längengrad I  10m   I  100m  I  1000m I   10km I 100km  I
   I------------+--------+--------+--------+--------+--------+
   I      0     I  0     I  0     I  0     I  0     I  0     I 
   I     10     I -0.011 I -0.01  I -0.01  I -0.010 I -0.010 I
   I     20     I -0.042 I -0.039 I -0.039 I -0.039 I -0.039 I 
   I     30     I -0.079 I -0.084 I -0.084 I -0.084 I -0.083 I 
   I     40     I -0.136 I -0.139 I -0.138 I -0.138 I -0.138 I 
   I     50     I -0.193 I -0.197 I -0.197 I -0.197 I -0.195 I 
   I     60     I -0.251 I -0.251 I -0.251 I -0.251 I -0.248 I 
   I     70     I -0.292 I -0.296 I -0.296 I -0.296 I -0.288 I 
   I     80     I -0.329 I -0.325 I -0.325 I -0.325 I -0.293 I 
   I------------+--------+--------+--------+--------+--------+

Warum die zweite Tabelle viel stimmiger aussieht als die erste, die fast keinen Fehler bei ±45° liefert, muss ich noch rauskriegen indem ich über Ellipsen meditiere. Besonders darüber wie bei uns in der Gegend die Längen oder die Breitengrade gedehnt oder gestaucht sind. An der Abweichung innerhalb der Zeilen der zweiten Tabelle sieht man auch die numerische Ungenauigkeit der Rechnerei, die Abweichungen sollten ja unabhängig von der Länge der Strecke sein.

Wenn man im Kilometerbereich bleibt und ein halbes Prozent toleriert, kommt man mit jeder Formel wohl hin, ansonsten “OpenLayers.Util.distVincenty” oder der Link von kellerma, der das gleiche Ergebnis liefert.

Grüße, Max

Alarm!
Max verwendet Kugel mit Radius gleich grosser Halbachse.
Kugel und Ellipse sollten doch flaechengleich sein, daher b < r < a .
Willst Du die Erdfiguar als Kugel approximieren, nimm doch als Radius 6371 km.
( r nicht ganz (a+b)/2 ) :slight_smile:

hi!

dank der großen Beteiligung sollte das erst einmal geklärt sein.

Hat einer jetzt eine Faustformel für die Rückumrechung. Also wenn man in einem Tool eine Länge angeben muss und diese in Grad angegeben werden muss - man aber nur eine Strecke in meter / kilometer hat.

Gruß Jan :slight_smile:

OL.destinationVincenty: Du gibtst ihm einen Punkt, eine Richtung und eine Entfernung und bekommst die Koordinaten des Zielpunktes.