![]() |
Abstandsberechnung zwischen 2 Städten
hallo erstmal an alle :)
ich habe hier ein kleines aber feines mathematisches als auch geographisches problem ich habe von 2 städten die längen und breiten grade gegeben berlin: länge: 13.413 breite: 52.523 düsseldorf länge: 6.783 breite: 51.233 nun möchte ich von diesen beiden städten den abstand berechnen und hier fängt mein problem an bei einer rellativ kurzen entfernung ist es ja noch möglich die entfernung mit hilfe des guten alten pythagoras zu errechnen wird die entfernung aber größer macht einem da die erdkrümmung einen strich durch die rechnung daher meine frage weiß irgendwer wie ich das ausrechnen könnte am besten auch an diesem beispiel mfg zero |
Re: Abstandsberechnung zwischen 2 Städten
![]() Das war im letzten Adventgewinnspiel im DF - die Sourcen zu meiner Lösung hab' ich leider nicht mehr ... |
Re: Abstandsberechnung zwischen 2 Städten
Schau dir einfach einmal die Lösungen zum Adventsgewinnspiel drüben im DF an. ;-)
![]() Da ging es u.a. auch darum. |
Re: Abstandsberechnung zwischen 2 Städten
wow das ging ja schnell habe das ganze ausprobiert funzt 1a
ihr seit die besten |
Re: Abstandsberechnung zwischen 2 Städten
zum einen sorry für doppelpost aber es stellt sich erneut ein kleines problem^^
mag sein das ich schon ne bissle blind bin aber ich finde den fehler net hab das ganze mal in ein mini prog gepackt aber das liefert mir bei einer strecke von düsseldorf nach berlin eine die distanz 140km was nicht sein kann hier mal so
Delphi-Quellcode:
ed:mit dem taschenrechner funzt das 1a :(
procedure TForm1.Button1Click(Sender: TObject);
var lange1,lange2,breit1,breit2,strecke :extended; begin lange1 := Strtofloat(edit1.Text); lange2 := Strtofloat(edit3.Text); breit1 := Strtofloat(edit2.Text); breit2 := Strtofloat(edit4.Text); strecke := arccos((sin(breit1)*sin(breit2))+(cos(breit1)*cos(breit2)*cos(lange2-lange1)))/360*40000 ; edit5.Text := floattostr(strecke); end; |
Re: Abstandsberechnung zwischen 2 Städten
Bogenmaß versus Grad.
Die VCL/RTL rechnet im Bogenmass. Es gibt Konvertierungsfunktionen; muss nur etwas suchen (unit Math). |
Re: Abstandsberechnung zwischen 2 Städten
Zitat:
ust ja richtig peinlich :wall: |
Re: Abstandsberechnung zwischen 2 Städten
Hallo,
das ist ja aber dann sicher erst mal Luftlinie. Wenn ich aber wegen gefahrener Kilometer zum Beispiel wissen will, welche Strecke ich über unser Strßennetz zurücklegen muss, dürfte die Strecke ja länger werden, als Luftlinie. Ich kann dann zwar einen Routenplaner bemühen, doch der muss mir die Distanz auch berechnen. Wie macht der das? Gibt es da Näherungsformeln, die die Kurven in der Streckenführung berücksichtigen oder Erfahrungswerte, um wieviele Meter oder Kilometer sich die Strecke durch die reale Streckenführung verlängert? Bin interessehalber mal wieder hier und habe den Thread gefunden. Mein Job erfordert auch PKW Fahrten. Um die vom Arbeitgeber erstattet zu kriegen, muss ich die Kilometer vorher wissen. Ich bemühe dann, wie schon gesagt, einen Routenplaner. Aber der muss ja die Strecke auch berechnen. Deshalb interesssiert mich die Frage, wenn denn schon in diesem Thread uber die Berechnung des Abstandes zweier Städte diskutiert wird. Sogar Flugzeuge fliegen wohl nicht immer exakt Luftlinie, da sie bei großen Strecken unterwegs mehrere Flughäfen ansteuern, die wohl kaum auf der Luftlinie liegen |
Re: Abstandsberechnung zwischen 2 Städten
Routenplaner berücksichtigen ja die exakte Streckenführung. Deshalb ist da natürlich der Wert nicht Luftlinie sondern entspricht der zurückgelegten Strecke.
Allgemein kann man das ja nicht berechnen ohne die tatsächlichen Daten zur Streckenführung zu haben, wie es bei Routenplanern der Fall ist. |
Re: Abstandsberechnung zwischen 2 Städten
Ein Routenplaner ist ein recht komplexes Stück Software.
Falls dich das interessiert, kannst du ja mal ![]() |
Re: Abstandsberechnung zwischen 2 Städten
Zitat:
Zitat:
|
Re: Abstandsberechnung zwischen 2 Städten
Für Koordinaten gibt es grundsätzlich 2 Verfahren. Das erste geht von einer idealen Kugelgestalt der Erde aus. Dies ist sicherlich innerhalb Deutschlands und für deine Belange ausreichend genau. Hierbei geht man meist von einem mittleren Planetenradius von 6371 km aus (die Angaben variieren je nach verwendeter Referenz).
Delphi-Quellcode:
Leider ist die Erde aber ein >68-eckiger Klumpen. Für genauere Betrachtungen sollte man deshalb berücksichtigen, daß die Erde durch ihre Rotation zu den Polen hin abgeflacht ist. Besonders wenn man über mehrere 1000 km Distanz mit Koordinaten ausrechnen will. Hier gibt es den Algorithmus von Andoyer, der ihn - um 1949 herum - in einem französischen Ephemeridenkalender veröffentlicht hat. Hab es nicht nachgemessen, aber die Abweichung soll für die Distanz Paris-New York im Bereich der quadrierten Abplattung liegen (<50 m). Natürlich nur in Bezug auf ein Referenzellipsoid. Tatsächlich Weglängen durch Abweichungen im Geoid sind nicht berücksichtigt (Abplattung, Referenzellipsoid und Geoid siehe Wikipedia)...
Function CalcSimpleGeoDistance (Lat1, Lon1, Lat2, Lon2, aRadius : Double) : Double;
// Calculates the distance between two positions, based on given // Latitude and Longitude values on an ideal sqhere with a given // radius; Dr. Jan Schulz, 2007 Var aPart1 : Double; aPart2 : Double; aPart3 : Double; Begin Lat1 := Lat1 * Pi / 180; Lon1 := Lon1 * Pi / 180; Lat2 := Lat2 * Pi / 180; Lon2 := Lon2 * Pi / 180; aPart1 := Cos (Lat1) * Cos (Lon1) * Cos (Lat2) * Cos (Lon2); aPart2 := Cos (Lat1) * Sin (Lon1) * Cos (Lat2) * Sin (Lon2); aPart3 := Sin (Lat1) * Sin (Lat2); Result := ArcCos (aPart1 + aPart2 + aPart3) * aRadius; end;
Delphi-Quellcode:
Bei dieser Methode nimmt man für den Äquatorialradius normalerweise 6378.137 km und für den Polradius 6356.752 km. Je nachdem welches Ellipsoid hierbei zu Grunde gelegt wird, weichen die einzelnen Werte voneinander ab.
Function CalcAndoyersGeoDistance (Lat1, Lon1, Lat2, Lon2, RadiusEQ, RadiusPol : Double) : Double;
// Calculates a more precise distance between two positions, based on given // Latitude and Longitude values for a planet with respect to the flattening // calculated from the polar and equatorial distance; Dr. Jan Schulz, 2007 Var Flattening : Double; AndoyerF : Double; AndoyerG : Double; AndoyerL : Double; AndoyerC : Double; AndoyerS : Double; AndoyerO : Double; AndoyerR : Double; H1 : Double; H2 : Double; Begin Lat1 := Lat1 * Pi / 180; Lon1 := Lon1 * Pi / 180; Lat2 := Lat2 * Pi / 180; Lon2 := Lon2 * Pi / 180; Flattening := CalcGeometricFlattening (RadiusEQ, RadiusPol); AndoyerF := (Lat1 + Lat2) / 2; AndoyerG := (Lat1 - Lat2) / 2; AndoyerL := (Lon1 - Lon2) / 2; AndoyerC := Sqr (Cos (AndoyerG)) * Sqr (Cos (AndoyerL)) + Sqr (Sin (AndoyerF)) * Sqr (Sin (AndoyerL)); AndoyerS := Sqr (Sin (AndoyerG)) * Sqr (Cos (AndoyerL)) + Sqr (Cos (AndoyerF)) * Sqr (Sin (AndoyerL)); AndoyerO := ArcTan ((Sqrt (AndoyerS / AndoyerC))); AndoyerR := Sqrt (AndoyerS * AndoyerC) / AndoyerO; H1 := (3 * AndoyerR - 1) / (2 * AndoyerC); H2 := (3 * AndoyerR + 1) / (2 * AndoyerS); Result := 2 * AndoyerO * RadiusEQ * ( 1 + Flattening * H1 * Sqr (Sin (AndoyerF)) * Sqr (Cos (AndoyerG)) - Flattening * H2 * Sqr (Cos (AndoyerF)) * Sqr (Sin (AndoyerG))); end; Function CalcGeometricFlattening (RadiusEQ, RadiusPol : Double) : Double; // Calculates the geometric flattening of a planet as relative difference // between the equatorial and polar radius; Dr. Jan Schulz, 2007 Begin If RadiusEQ > 0 THen Result := (RadiusEQ - RadiusPol) / RadiusEQ Else Result := 0; end; Liebe Grüße aus ><)))°> Town Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz