OpenGeoDB - Entfernungsberechnung: Unterschied zwischen den Versionen

OpenGeoDB & GISWiki - Das freie Portal für Geoinformatik (GIS)
Wechseln zu: Navigation, Suche
K
K (Umlaute von "ue" in "ü" geändert und Rechtschreibfehler entfernt)
 
Zeile 5: Zeile 5:
 
die Frage wurde bereits mehrfach angeschnitten und bereits mehrfach beantwortet.
 
die Frage wurde bereits mehrfach angeschnitten und bereits mehrfach beantwortet.
  
Fuer unsere Zwecke hier ist die gaengige Formel zwischen A und B wohl
+
Für unsere Zwecke hier ist die gängige Formel zwischen A und B wohl
  
 
   arccos(sin(B_lat)*sin(A_lat)+cos(B_lat)*cos(A_lat)*cos(B_lon - A_lon))
 
   arccos(sin(B_lat)*sin(A_lat)+cos(B_lat)*cos(A_lat)*cos(B_lon - A_lon))
  
... multipliziert mit dem Erdradius. Aber wie gross ist der? Unsere Erde ist ja keine perfekte Kugel mit z.B. Radius 6371,110 km oder Umfang = 40000 km sondern eher etwas flachgedrueckt. Unterschiedliche Quellen nennen zwischen 6336 und 6399 km. Fuer unsere Breitengrade sollte 6380 km ganz gut hinkommen.
+
... multipliziert mit dem Erdradius. Aber wie groß ist der? Unsere Erde ist ja keine perfekte Kugel mit z.B. Radius 6371,110 km oder Umfang = 40000 km sondern eher etwas flachgedrückt. Unterschiedliche Quellen nennen zwischen 6336 und 6399 km. Für unsere Breitengrade sollte 6380 km ganz gut hinkommen.
  
 
Die Diskussion entsprang in news:de.alt.technik.gps und verwies auf
 
Die Diskussion entsprang in news:de.alt.technik.gps und verwies auf
Zeile 21: Zeile 21:
 
   d  = sqrt((X2 - X1)^2 + (Y2 - Y1)^2)
 
   d  = sqrt((X2 - X1)^2 + (Y2 - Y1)^2)
  
kartesische Koordinaten fuer X/Y; Genauigkeit angeblich ausreichend bis ca. 20 km: Breitengrad / Meter Abweichung
+
kartesische Koordinaten für X/Y; Genauigkeit angeblich ausreichend bis ca. 20 km: Breitengrad / Meter Abweichung
  
 
         70  / 30
 
         70  / 30
Zeile 37: Zeile 37:
 
   R = Erdradius
 
   R = Erdradius
  
Bei zwei Punkte auf gegenueberliegenden Kugelseiten betraegt der Fehler etwa 2 km, verursacht durch Rundungsfehler in der Sinus-Berechnung bei kleinen Winkeln. Ansonsten ist die Formel gut geeignet. Fehler entstehen insgesamt aus der rechnerinternen Rundung der Zahlenwerte, wie auch aus der begrenzten Laenge von Pi.
+
Bei zwei Punkten auf gegenüberliegenden Kugelseiten beträgt der Fehler etwa 2 km, verursacht durch Rundungsfehler in der Sinus-Berechnung bei kleinen Winkeln. Ansonsten ist die Formel gut geeignet. Fehler entstehen insgesamt aus der rechnerinternen Rundung der Zahlenwerte, als auch aus der begrenzten Länge von Pi.
  
Fuer weit auseinander liegende Punkte bietet sich z.B. eine modifizierte Variante an:
+
Für weit auseinander liegende Punkte bietet sich z.B. eine modifizierte Variante an:
  
 
   dlon = B_lon - A_lon
 
   dlon = B_lon - A_lon
Zeile 56: Zeile 56:
 
4) arccos
 
4) arccos
  
... diese Formel ist mathematisch korrekt, aber ungeeignet fuer geringe Entfernungen!
+
... diese Formel ist mathematisch korrekt, aber ungeeignet für geringe Entfernungen!
  
 
   a = sin(A_lat) * sin(B_lat)
 
   a = sin(A_lat) * sin(B_lat)
Zeile 69: Zeile 69:
 
   cos (0.05 sec) = 0.999999999999971
 
   cos (0.05 sec) = 0.999999999999971
  
Bei nur sieben signifikanten Stellen reicht die Rechenaufloesung bis max. 1 Minute. Tatsaechlich duerften wir mit z.B. 15 signifikanten Stellen ganz gut im Bereich der maximalen Aufloesung von Sekunden liegen. Mit dem Taschenrechner ist da aber nicht mehr viel zu wollen.
+
Bei nur sieben signifikanten Stellen reicht die Rechenauflösung bis max. 1 Minute. Tatsächlich dürften wir mit z.B. 15 signifikanten Stellen ganz gut im Bereich der maximalen Auflösung von Sekunden liegen. Mit dem Taschenrechner ist da aber nicht mehr viel zu wollen.
  
All das relativiert sich mit der Genauigkeit des genutzten Erdumfangs. Ich wusste bisher nicht, dass die Nautische Meile / Seemeile mit 1,852 km als Minute vom Aequatorumfang ableitet.
+
All das relativiert sich mit der Genauigkeit des genutzten Erdumfangs. Ich wusste bisher nicht, dass die Nautische Meile / Seemeile mit 1,852 km als Minute vom Äquatorumfang ableitet.
  
Der tatsaechliche Radius ist wohl ganz gut angenaehert durch die Formel
+
Der tatsächliche Radius ist wohl ganz gut angenähert durch die Formel
  
 
   R' = a * (1 - e^2) / (1 - e^2 * (sin(lat))^2)^(3/2)
 
   R' = a * (1 - e^2) / (1 - e^2 * (sin(lat))^2)^(3/2)
Zeile 79: Zeile 79:
 
   a: Erdumfang
 
   a: Erdumfang
 
   b: Polarradius
 
   b: Polarradius
   e: Exxentrizitaet sqrt(1 - b^2/a^2)
+
   e: Exzentrizität sqrt(1 - b^2/a^2)
  
 
bzw.
 
bzw.
Zeile 107: Zeile 107:
 
  90 degrees . 6399 km (3976 mi) . 6399 km (3976 mi) . 6399 km (3976 mi)
 
  90 degrees . 6399 km (3976 mi) . 6399 km (3976 mi) . 6399 km (3976 mi)
  
.... aber interessant ist das wohl eher fuer Entfernungen auf See.
+
.... aber interessant ist das wohl eher für Entfernungen auf See.
  
Denn bei uns auf dem Festland wird das 'Normal-Null' ohnehin willkuerlich festgelegt und liegt z.B. um 20 cm tiefer(?) als in der Schweiz.
+
Denn bei uns auf dem Festland wird das 'Normal-Null' ohnehin willkürlich festgelegt und liegt z.B. um 20 cm tiefer(?) als in der Schweiz.
  
 
[...]
 
[...]

Aktuelle Version vom 2. Februar 2012, 11:57 Uhr

FAQ Detail: Entfernungsberechnung

Hallo,

die Frage wurde bereits mehrfach angeschnitten und bereits mehrfach beantwortet.

Für unsere Zwecke hier ist die gängige Formel zwischen A und B wohl

 arccos(sin(B_lat)*sin(A_lat)+cos(B_lat)*cos(A_lat)*cos(B_lon - A_lon))

... multipliziert mit dem Erdradius. Aber wie groß ist der? Unsere Erde ist ja keine perfekte Kugel mit z.B. Radius 6371,110 km oder Umfang = 40000 km sondern eher etwas flachgedrückt. Unterschiedliche Quellen nennen zwischen 6336 und 6399 km. Für unsere Breitengrade sollte 6380 km ganz gut hinkommen.

Die Diskussion entsprang in news:de.alt.technik.gps und verwies auf

Die dortigen Angaben finde ich interessant genug, um das Prinzip hier nochmals zu wiederholen.

Denn beispielsweise habe ich auch eine Software, die den arccos nicht beherrscht. Da sind manche Alternativen noch interessant:

1) Pythagoras

 d  = sqrt((X2 - X1)^2 + (Y2 - Y1)^2)

kartesische Koordinaten für X/Y; Genauigkeit angeblich ausreichend bis ca. 20 km: Breitengrad / Meter Abweichung

        70  / 30
        50  / 20
        30  /  9

2) Haversine Formel

 dlon = B_lon - A_lon
 dlat = B_lat - A_lat
 a = (sin(dlat/2))^2 + cos(A_lat) * cos(B_lat) * (sin(dlon/2))^2
 c = 2 * arcsin(min(1,sqrt(a)))
 d = R * c
 R = Erdradius

Bei zwei Punkten auf gegenüberliegenden Kugelseiten beträgt der Fehler etwa 2 km, verursacht durch Rundungsfehler in der Sinus-Berechnung bei kleinen Winkeln. Ansonsten ist die Formel gut geeignet. Fehler entstehen insgesamt aus der rechnerinternen Rundung der Zahlenwerte, als auch aus der begrenzten Länge von Pi.

Für weit auseinander liegende Punkte bietet sich z.B. eine modifizierte Variante an:

 dlon = B_lon - A_lon
 dlat = B_lat - A_lat
 a = (sin(dlat/2))^2 + cos(A_lat) * cos(B_lat) * (sin(dlon/2))^2
 c = 2 * asin( sqrt(a) )
 d = R * c

3) nahe der Polarkappen

 a = pi/2 - A_lat
 b = pi/2 - B_lat
 c = sqrt( a^2 + b^2 - 2 * a * b * cos(B_lon - A_lon) )
 d = R * c

4) arccos

... diese Formel ist mathematisch korrekt, aber ungeeignet für geringe Entfernungen!

 a = sin(A_lat) * sin(B_lat)
 b = cos(A_lat) * cos(B_lat) * cos(B_lon - A_lon)
 c = arccos(a + b)
 d = R * c
 cos (5 degree) = 0.996194698
 cos (1 degree) = 0.999847695
 cos (1 minute) = 0.9999999577
 cos (1 second) = 0.9999999999882
 cos (0.05 sec) = 0.999999999999971

Bei nur sieben signifikanten Stellen reicht die Rechenauflösung bis max. 1 Minute. Tatsächlich dürften wir mit z.B. 15 signifikanten Stellen ganz gut im Bereich der maximalen Auflösung von Sekunden liegen. Mit dem Taschenrechner ist da aber nicht mehr viel zu wollen.

All das relativiert sich mit der Genauigkeit des genutzten Erdumfangs. Ich wusste bisher nicht, dass die Nautische Meile / Seemeile mit 1,852 km als Minute vom Äquatorumfang ableitet.

Der tatsächliche Radius ist wohl ganz gut angenähert durch die Formel

 R' = a * (1 - e^2) / (1 - e^2 * (sin(lat))^2)^(3/2)
 a: Erdumfang
 b: Polarradius
 e: Exzentrizität sqrt(1 - b^2/a^2)

bzw.

 a = 6378 km (3963 mi) Equatorial radius (surface to center distance)
 b = 6357 km (3950 mi) Polar radius (surface to center distance)
 e = 0.081082 Eccentricity

gives the following table of values for the

Radii of Curvature:

latitude...........r...................R'..................N..........

00 degrees . 6357 km (3950 mi) . 6336 km (3937 mi) . 6378 km (3963 mi)

15 degrees . 6360 km (3952 mi) . 6340 km (3940 mi) . 6379 km (3964 mi)

30 degrees . 6367 km (3957 mi) . 6352 km (3947 mi) . 6383 km (3966 mi)

45 degrees . 6378 km (3963 mi) . 6367 km (3957 mi) . 6389 km (3970 mi)

60 degrees . 6388 km (3970 mi) . 6383 km (3966 mi) . 6394 km (3973 mi)

75 degrees . 6396 km (3974 mi) . 6395 km (3974 mi) . 6398 km (3975 mi)

90 degrees . 6399 km (3976 mi) . 6399 km (3976 mi) . 6399 km (3976 mi)

.... aber interessant ist das wohl eher für Entfernungen auf See.

Denn bei uns auf dem Festland wird das 'Normal-Null' ohnehin willkürlich festgelegt und liegt z.B. um 20 cm tiefer(?) als in der Schweiz.

[...]