Wie errechnet man sich den Umfang der Längengrade?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
-
Aber eins muss ich noch mal posten:
Ich habe mal die Koordinaten rausgesucht von Düsseldorf und Berlin und habe dann die in meinen Code eingebaut:
Also: Ich habe folgendes kriiert
<?php //Düsseldorf $xa = \\\'6,460\\\'; $ya = \\\'51,171\\\'; //Berlin $xb = \\\'13,320\\\'; $yb = \\\'52,220\\\'; //Errechnung der Differenzen von x und y $dif_x = $xa - $xb; $dif_y = $ya - $yb; //Errechnung der Differenzen in km $dif_y_km = $dif_y * 111; $durchschnitt = $ya + $yb; $u = 2 * pi() * \'6371,2\' * cos($durchschnitt / 2) / 180; $dif_x_km = $dif_x * $u; //Errechnung der Hypotenuse $x = pow($dif_x_km, 2); $y = pow($dif_y_km, 2); $entfernung = pow($x + $y, 1/2); echo \\\'x: \\\'.$dif_x_km.\\\'km<br>y: \\\'.$dif_y_km.\\\'km<br><br>\\\'; echo \\\'Entfernung: \\\'.$entfernung.\\\'km\\\'; ?>
Tada!
Ich habe errechnet, dass es einen Abweichsfaktor von 8% gab. Weshalb?
Beitrag geändert: 23.9.2007 15:41:12 von fly-europe -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wie soll ich das verstehen????
Oh je
$u = 2 * pi() * 6371,2 * cos($durchschnitt / 2) / 180;
Nimmt die cos-Funktion von php nicht den Winkel im Bogenmaß entgegen??
Du steckst ja einen Winkel im Gradmaß rein! -
Ja und? Was soll der Unterschied sein?
Beitrag geändert: 23.9.2007 16:08:08 von fly-europe -
fly-europe schrieb:
Mit so einem Statement hat man sich eigentlich schon selbst disqualifiziert.
Ja und? Was soll der Unterschied sein?
Was der Unterschied sein soll?????
Bogenmaß ist eimal den Kreis rum von 0 bis 6.283 im Gradmaß dagegen ist es von 0° bis 360° !!!
Wenn die Funktion cos das Bogenmaß erwartet und du steckst einen Winkel im Gradmaß rein, kommt etwas raus, was mit dem wirklichen Ergebnis nix aber auch gar nix zu tun hat.
51.695, dein Durchschnittswinkel von Berlin und Düsseldorf entspricht, wenn man meint es ist Bogenmaß, einem Winkel von 82°, dh. du rechnest in deinem Skript mit der Höhe von Nord-Grönland!
Dann hast du noch einen weiteren Fehler drin, der das ganze etwas ausgleicht:
$u = 2 * pi() * 6371,2 * cos($durchschnitt / 2) / 180;
Warum denn 180 bitte??? Es muss doch 360 sein!!
Ich hab dein Skript mal rauskopiert:
http://cga.lima-city.de/geo.php
und es gibt mir eine Entfernung von 244 km an. Das ist kein »Abweichfaktor« von 8% *lol* schön wärs, das hat garnix mehr mit dem wirklichen Ergebnis zu tun, das liegt nämlich irgendwo bei 460 km!!!
Also wenn man all die Fehler verbessert, sieht das so aus:
<?php //Düsseldorf $xa = 6.460; $ya = 51.171; //Berlin $xb = 13.320; $yb = 52.220; //Errechnung der Differenzen von x und y $dif_x = $xa - $xb; $dif_y = $ya - $yb; //Errechnung der Differenzen in km $dif_y_km = $dif_y * 111; $durchschnitt = ($ya + $yb)*0.5; $u = 2 * pi() * 6371.2 * cos(deg2rad($durchschnitt)) / 360; $dif_x_km = $dif_x * $u; //Errechnung der Hypotenuse $x = pow($dif_x_km, 2); $y = pow($dif_y_km, 2); $entfernung = pow($x + $y, 0.5); echo \"x: \".$dif_x_km.\"km<br>y: \".$dif_y_km.\"km<br><br>\"; echo \"Entfernung: \".$entfernung.\"km\"; ?>
Und siehe da:
http://cga.lima-city.de/geo2.php
es kommt 487 km raus.
Könnte genauer sein.
Der nächste Schritt wäre dann es mit sphärischer Geometrie zu machen, das mit dem Durchschnittswinkel ist ja wirklich nur eine grobe Näherung.
Dazu nochmal die Einladung von mir, sich mal den Link anzuschauen, den ich gepostet habe. -
Hm ja. DANKE! Es haut hin!
Düsseldorf - Berlin (hab ich ausgemessen) sind ca. 483km +-10km. (Ich hatte eine Deutschlandkarte). Endlich ist es perfekt. -
fly-europe schrieb:
Bedenke, dass die Karte »verzerrt« ist. Wie z. B. eine Weltkarte, da stimmt der Maßstab auch nur am Äquator.
Hm ja. DANKE! Es haut hin!
Düsseldorf - Berlin (hab ich ausgemessen) sind ca. 483km +-10km. (Ich hatte eine Deutschlandkarte). Endlich ist es perfekt.
Google Earth gibt mir für Düsseldorf - Berlin Tegel: 469 km.
Ich hab mir mal die Koordinaten der beiden Flughäfen angeschaut und noch einen Fehler entdeckt:
Du hast Angaben in Winkelminuten und Winkelsekunden einfach als Dezimalzahlen geschrieben,
51° 17′ 1\" ist nicht 51.171°
Du musst das schon umrechnen (60\" = 1′ , 60′ = 1°):
51° 17′ 1\" = 51° + 17°/60 + 1°/3600 = 51.284°
Noch eine Frage: Sind die Flughäfen, die deine Airline anfliegt nur in Deutschland? -
Hm ja, das müsste ich dann noch mal umrechnen.
Zu deiner Off-Frage: Ja bislang. Wenn jemand Lust hat innerhalb von Europa einen 24h Flugplan zu erstellen (Flugezeuge können nicht ihren Standort ändern und es gibt eine feste Flugzeuganzahl - das ist das schwierige), kann sich gerne bei mir melden. Das Flugnetz soll sich später auf ganz Europa ausbreiten (und ein Teil Afrika). Aber zur Zeit ist es ein bisschen gestoppt, wegend er Schule und den Flugrecorder. Dafür brauche ich die Berechnung.
Vielleicht sollte ich ein Aufbau-Erklärung-Teil schreiben ;) Vielleicht wäre das ja mal für den einen oder anderen interessant. Bislang habe ich 3000 Zeilen geschrieben -
fly-europe schrieb:
Dann ist gut, denn diese Nährerungsformel für die Entfernungen funktioniert nur wenn die Flughäfen einigermaßen nah beinanderliegen.
Zu deiner Off-Frage: Ja bislang.
Für Barcelona - Berlin würde der Fehler schon ziemlich groß werden. -
Naja. Ein Flugzeug fliegt gewöhnlicherweise an großen Knotenpunkten vorbei. Diese liegen (wenns kein Transatlantikflug ist) meist nur maximal 200km auseinander. Das Programm kennt nartürlich diese Punkte. Jedenfalls von Deutschland ;)
-
Ich habe mir noch mal eine Umrechnung entwickelt von den Graden uin dezimal, womit dann PHP doer der Taschenrechner mit rechnen kann ;)
ZB.
<?php 51°55\\\'18\\\'\\\' bringe ich in eine Arrar die $cor heißt //Umrechnung in Sekunden $sek = (cor[1] * 60) + cor[2]; //der Umrechnungsfaktor ist 5/18 gleichzeitig rechne ich /1000 um das Komma zu verrücken $sek = sek * 5/18 /1000; //Zum Schluss rechne ich noch die ganzen Grade wieder ran und fertig $dez = $cor[0] + $sek; ?>
Beitrag geändert: 28.9.2007 20:15:46 von fly-europe -
Also bei dir sind
cor[0] : Grad
cor[1] : Minuten
cor[2] : Sekunden
OK?
Warum machst du das so komplizert und nicht einfach mit:
$dez = $cor[0] + $cor[1]/60 + $cor[2]/3600;
Würde mich mal interessieren.
Ansonsten ist es richtig. -
Ja genau das meine ich mir $cor
Jetzt muss ich das ganze monatelang erarbeitete, oder mit Hilfe erarbeite noch im Code einfügen und dann werd ich mal schaun ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage