0 Daumen
2,7k Aufrufe

Aufgabe:

Die Entfernung zwischen 2 Koordinaten berechnen z.B. anhand dieser Formel:

distance = sqrt(dx * dx + dy * dy)

mit distance: Entfernung in km
dx = 111.3 * cos(lat) * (lon1 - lon2)
lat = (lat1 + lat2) / 2 * 0.01745
dy = 111.3 * (lat1 - lat2)
lat1, lat2, lon1, lon2: Breite, Länge in Grad


Problem/Ansatz:

Also eigentlich ist es so, dass ich diese Formel in ein Javaprogramm implementieren möchte. Allerdings bin ich mir nicht sicher, ob das die richtige Formel ist. Denn, wenn ich als Beispiel diese Koordinaten nehme, dann kommt nicht das richtige Ergebnis raus. Könnt ihr mir sagen, ob ich die Formel irgendwie falsch anwende oder ob ich das Endergebnis irgendwie umwandeln muss, damit die Entfernung in km rauskommt? Oder ist die Formel falsch und da kommt gar nicht die Entfernung in km raus?

lat1 = 51,4344079

lon1 = 6,7623293

lat2 = 51,4556432

lon2 = 7,0115552

Also das Ergebnis sollte 17,432980142928074 sein, aber wenn ich die Formel anwende kommt immer 7,1491927492477.

Avatar von

3 Antworten

0 Daumen

Hallo Al,

Oder ist die Formel falsch?

Ja - die Formel kann nur falsch sein. Die Größen \(\text dx\) und \(\text dy\) liefern Dir bestenfalls die Entfernungungen auf einem Breiten- bzw. Längenkreis. Und auf einer Kugel kannst Du jetzt keinen Pythagoras anwenden. Eine Kugeloberfäche ist ja keine Ebene!

Und diese komische Konstante \(113,3\) ist wahrscheinlich \(2\pi R/360\), wenn \(R\) der mittlere Erdradius ist. Sie hat also die Einheit \([\text{km}/°]\). Was ist denn \(lat\)? Das benutzt Du nicht.

Du hast die Formel wahrscheinlich von https://www.kompf.de/gps/distcalc.html. Die Formel gilt nur für sehr kleine Entfernungen. Weiter unten ist aber auch das allgemeine Vorgehen beschrieben; so weit ich das sehe. Ich habe es nicht im Detail gelesen.

Eine bessere Beschreibung findest Du im Artikel Orthodrome in der Wikipedia.

Tipp: eine Angabe wie \(17,432980142928074 \,\text{km}\) ist garantiert in den letzten 12 Stellen falsch. Da wird der Millionste Teil eines Millionstel Meters angegeben. Runde diese Zahlen getrost auf drei Stellen nach dem Komma.

Gruß Werner

Avatar von 48 k

Okay, dass die Formel falsch ist, ist schonmal gut zu wissen. Ich schau mir mal die Wikipedia Seite an. Vielen Dank!

0 Daumen

Entfernung ist ein weiter Begriff...

Frankfurt Airport

{"FRA", (50 + 1 / 60 + 35 / 60²)°, (8 + 32 / 60 + 33 / 60²)°} 

Los Angeles Airport

{"LAX", (33 + 56 / 60 + 35 / 60²)°, -((118 + 24 / 60 + 29 / 60²)°)}

liegen auf dem Großkreis

DistGK(r, βA, λA, βB, λB) = r acos(sin(βA) sin(βB) + cos(βA) cos(βB) cos(λB - λA))

DistGK(6380, 50.02638888889°, 8.5425°, 33.94305555556°, -118.4080555556°)=9334.342 km

oder

DistGK(6380, 51.4344079°, 6.7623293° , 51.4556432°,7.0115552°)=17.458

Wie kommt denn der Wert 51,4344079 in Deinem Programm an? Woher soll der Compiler wissen das 51,4344079 usw. Winkelgradangaben sind?

Avatar von 21 k

Ich hatte es noch nicht implementiert, sondern hab es im TR berechnet um zu schauen, ob es die richtige Formel ist, aber anscheinend ist sie falsch. Die Formel, die du anwendest habe ich auch gefunden, aber anscheinend nicht bemerkt, dass man die Zahlen in Grad angeben soll.

Man muss die Winkel entsprechend den Einstellungen des TR entweder in RAD oder in GRAD eingeben - der Java-Compiler wird Winkel sicher im Bogenmaß und nicht in Winkelgrad erwarten?

https://www.geogebra.org/cas

Ja, ich muss das wohl umstellen, Java erwartet den Bogenmaß.

0 Daumen

Hallo

die richtige Formel ist:

dist = 6378.388 * acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1))

dabei wird der arccos für Rad genommen, oder du musst noch mit pi/180 multiplizieren

deine Formel geht davon aus, nur kleine Entfernungen zu messen, für die die Erde praktisch eben ist.

allerdings komm ich mit deiner Formel auch auf 17,..

was hast du den für dx^2 und dy^2 raus?

lul

Avatar von 106 k 🚀

Da kommt bei mir das raus:

dx^2 = 45,52487724

dy^2 = 5,586079733

Hallo

bei mir dx^2 etwa 360 was rechnest du denn? die Formel gilt in grad also TR auf deg stellen nicht Rad.

Gruß lul

Ohh ja, dann muss ich wohl den TR umstellen..

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community