Entfernung zwischen zwei Orten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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!
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!?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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
zwiety
User
Beiträge: 25
Registriert: Sonntag 1. April 2012, 19:06

sorry wollt ich hier nicht reinschreiben
Zuletzt geändert von zwiety am Mittwoch 2. Mai 2012, 07:01, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also ich habe in gpx.js die Haversine-Formel verwendet, per Link aus StackOverflow.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten