Seite 1 von 1

Entfernung zwischen zwei Orten

Verfasst: Donnerstag 20. August 2009, 15:05
von nemomuk
Hallo,

ich habe gerade versucht die Entfernung zwischen zwei beliebigen Orten auf der Erde zu berechnen und bastle da an einer Formel rum.

Code: Alles auswählen

from math import sin, cos, sqrt, asin

# Munich
lat1 = 48.1333
long1 = 11.583
# Berlin
lat2 = 52.5000
long2 = 13.4167

diff_lat = lat2 - lat1
diff_long = long2 - long1

r_equat = 6378.0
r_polar = 6357.0
average_lat = (lat1 + lat2) / 2
ecc = sqrt(1 - (r_equat**2) / (r_polar**2))

r1 = (r_equat * (1 - ecc**2)) / (((1 - ecc**2) * sin(average_lat)**2)**(3/2))
r2 = r_equat / (sqrt(1 - ecc**2 * sin(average_lat)**2))
r_average = (r1 * (diff_lat / (diff_lat + diff_long))) + (r2 * (diff_long / (diff_lat + diff_long)))

res = sin(diff_lat / 2)**2 + cos(lat1) * cos(lat2) * sin(diff_long / 2)**2
if res < 1:
    distance = r_average * 2 * asin(sqrt(res))
else:
    distance = r_average * 2 * asin(1)
print distance
Leider funktioniert das nicht so, wie ich es mir wünschen würde. Ich habe mich mit folgender "Anleitung" durchgearbeitet: http://opengeodb.hoppe-media.com/index. ... Entfernung und bekomme keine richtigen Ergebnisse - vllt. findet einer von euch den Fehler... ich kann noch so lange auf die Formeln schauen und komm nicht drauf (vllt. liegt es auch daran, dass ich zu lange draufgeschaut habe^^).

Ich bin für jeden Verbesserungsvorschlag offen und freue mich, wenn das Problem gelöst ist.

Danke!

Verfasst: Donnerstag 20. August 2009, 15:36
von BlackJack
@SchneiderWeisse: Dir ist klar, dass die ganzen trigonometrischen Funktionen im `math`-Modul mit Werten im Bogenmass und nicht mit Gradzahlen rechnen!? Vielleicht reicht es ja schon `math.radians()` auf die Eingangsdaten loszulassen!?

Verfasst: Donnerstag 20. August 2009, 17:02
von nemomuk
EDIT: habe wohl den Polar-Radius und Äquator-Radius verwechselt. Hier die aktualisierte Version.

EDIT2: Noch einen Rechenfehler raus und das Ergebnis kann sich wirklich sehen lassen, Google Earths Ergebnis variiert nur um 2km.

Danke für die Unterstützung!

Code: Alles auswählen

from math import sin, cos, sqrt, asin, radians

# Munich
lat1 = radians(48.1333)
long1 = radians(11.583)
# Berlin
lat2 = radians(52.5000)
long2 = radians(13.4167)

diff_lat = abs(lat2 - lat1)
diff_long = abs(long2 - long1)

r_equat = 6378.0
r_polar = 6357.0
average_lat = (lat1 + lat2) / 2
ecc = sqrt(1 - (r_polar**2 / r_equat**2))

r1 = (r_equat * (1 - ecc**2)) / (1 - ecc**2 * sin(average_lat)**2)**(1.5)
r2 = r_equat / (sqrt(1 - ecc**2 * sin(average_lat)**2))
r_average = (r1 * (diff_lat / (diff_lat + diff_long))) + (r2 * (diff_long / (diff_lat + diff_long)))

res = sin(diff_lat / 2)**2 + cos(lat1) * cos(lat2) * sin(diff_long / 2)**2
c = 2 * asin(min(1, sqrt(res)))
distance = r_average * c
print distance

Re: Entfernung zwischen zwei Orten

Verfasst: Montag 30. April 2012, 11:39
von zwiety
sorry wollt ich hier nicht reinschreiben

Re: Entfernung zwischen zwei Orten

Verfasst: Dienstag 1. Mai 2012, 04:38
von Leonidas
Also ich habe in gpx.js die Haversine-Formel verwendet, per Link aus StackOverflow.