Benutzer:Erik/Extension:Häfen in der Nähe: Unterschied zwischen den Versionen
Erik (Diskussion | Beiträge) K Revisionsliste + ToDo-Liste |
→ToDo: php4/5/7 |
||
| (4 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 24: | Zeile 24: | ||
;lat:Angabe der geografischen Breit des Ausgsngspunkts | ;lat:Angabe der geografischen Breit des Ausgsngspunkts | ||
;dist:Der maximal Abstand vom Ausgangspunkt, den ein Hafen haben darf | ;dist:Der maximal Abstand vom Ausgangspunkt, den ein Hafen haben darf | ||
;showdist:Mit showdist="yes" wird die Anzeige der Distanzen aktiviert | |||
;max:Die maximale Anzahl von angezeigten Häfen | ;max:Die maximale Anzahl von angezeigten Häfen | ||
| Zeile 36: | Zeile 37: | ||
== Versionen == | == Versionen == | ||
;2007-03-04:Die Distanzanzeige ist nun per default deaktiviert. Sie kann über das Attribut showdist aktiviert werden. | |||
;2007-03-03:Fix für PHP4. Die benutzen DOM-Funktionen von PHP5 waren nicht rückwärtskompatibel. Die Umstellung auf DOM XML war zu aufwendig. Daher die 'saubere' Lösung: Erstellen eines Parsers. | ;2007-03-03:Fix für PHP4. Die benutzen DOM-Funktionen von PHP5 waren nicht rückwärtskompatibel. Die Umstellung auf DOM XML war zu aufwendig. Daher die 'saubere' Lösung: Erstellen eines Parsers. | ||
;2007-03-02:Initiale Version | ;2007-03-02:Initiale Version | ||
| Zeile 46: | Zeile 48: | ||
// HISTORY | // HISTORY | ||
// 2007-03-04 : The display of the distance is no deactivated by default. | |||
// It can be activated using the showdist attribute. | |||
// 2007-03-04 : Fix for PHP 4 | // 2007-03-04 : Fix for PHP 4 | ||
// Instead of DOM or DOM XML, the xml parser functions are used | // Instead of DOM or DOM XML, the xml parser functions are used | ||
| Zeile 201: | Zeile 205: | ||
$max_cnt = 10; | $max_cnt = 10; | ||
} | } | ||
$show_distance = false; | |||
if (isset($argv["showdist"])) { | |||
if ($argv["showdist"] == "yes") { | |||
$show_distance = true; | |||
} | |||
} | |||
// initialize the array for the found places | // initialize the array for the found places | ||
| Zeile 273: | Zeile 284: | ||
$cnt = 0; | $cnt = 0; | ||
foreach ($nearby_places as $place) { | foreach ($nearby_places as $place) { | ||
$output .= "[[" . $place["link"] . "|" . $place["name"] . "]]"; | |||
if ($show_distance == true) { | |||
$output .= " (" . number_format($place["dist"], 0) . "sm)"; | |||
} | |||
$output .= " |\n"; | |||
$cnt++; | $cnt++; | ||
| Zeile 299: | Zeile 314: | ||
;Test mit verschiedenen Wiki-Versionen | ;Test mit verschiedenen Wiki-Versionen | ||
:Bisher wurde die Extension nur mit 1.6.0, 1.7.1, 1.9.3 getestet. Andere Versionen müssen noch getestet werden. Auch wurde bei den Tests nur PHP 5 verwendet. Läuft das Script auch mit PHP 4? | :Bisher wurde die Extension nur mit 1.6.0, 1.7.1, 1.9.3 getestet. Andere Versionen müssen noch getestet werden. Auch wurde bei den Tests nur PHP 5 verwendet. Läuft das Script auch mit PHP 4? | ||
::m.E. uninteressant. php7 ist eher die Frage.--[[Benutzer:Argonaut|Argonaut]] ([[Benutzer Diskussion:Argonaut|Diskussion]]) 17:00, 8. Nov. 2017 (UTC) | |||
:Bisherige Testumgebungen: | :Bisherige Testumgebungen: | ||
:* MediaWiki: 1.6.0, PHP: 5.1.2 (apache2handler), MySQL: 5.0.18 | :* MediaWiki: 1.6.0, PHP: 5.1.2 (apache2handler), MySQL: 5.0.18 | ||
| Zeile 313: | Zeile 329: | ||
;Fehlerbehandlungen | ;Fehlerbehandlungen | ||
:Müssen noch hinzu gefügt werden. Sind bisher noch nicht vorhanden. | :Müssen noch hinzu gefügt werden. Sind bisher noch nicht vorhanden. | ||
== Mathematisches == | |||
===Verfahren=== | |||
Breitenunterschied (b) in nm sind zunächst recht einfach zu berechnen. Er ergibt sich aus der Differenz (Δφ) von der Breiten von Ausgangspunkt zu Endpunkt. Der Längenunterschied (a) ist nicht mehr ganz so einfach zu berechnen, da eine Bogenminute nur am Äquator einer sm entpricht. Hier muss der Abweitung (Δλ) zwischen den beiden Punkten je nach Breite skaliert werden. Als Skalierungsfaktor ergibt sich der Cosinus der Breite. Da die beiden Punkte auf verschiedenen Breiten liegen können wird die mittlere Breite (Mittelbreite φ<sub>M</sub>) dafür genommen. Somit ergibt sich aus der Abweitung (Δλ) der Längenunterschied (a). Längen- (a) und Breitenunterschied (b) bilden Gegenkathete (a) und Ankathete (b) eines rechtwinkligen Dreiecks. Der zu steuernde Kurs (α) ist der arctan von Längenunterschied (a) geteilt durch den Breitenunterschied (b). Die Distanz (Länge der Hypothenuse) ergibt sich dann aus dem Breitenunterschied (b) geteilt durch den cosinus der mittleren Breite (φ<sub>M</sub>) skaliert mit 60, um von Grad auf sm umzurechnen. | |||
Dieses Verfahren funktioniert nur bei kleineren Distanzen, bzw. Breitenunterschieden. | |||
=== Formeln === | |||
;Breitenunterschied:b = Δφ = φ<sub>B</sub> - φ<sub>A</sub> | |||
;Abweitung:Δλ = λ<sub>B</sub> - λ<sub>A</sub> | |||
;Mittelbreite:φ<sub>M</sub> = ½ (φ<sub>A</sub> + φ<sub>B</sub>) | |||
;Längenunterschied:a = Δλ * cos(φ<sub>M</sub>) | |||
;Winkel:α = arctan(a/b) = arctan((Δλ/Δφ) * cos(φ<sub>M</sub>)) | |||
;Distanz:d = 60 * b / cos(α) | |||
===Zum Nachlesen=== | |||
* Gunter Herdam: '''Astronomische Navigation''', 3. Auflage September 2001, Eingenverlag, S. 101ff [http://www.hmi.de/bsg/astro/index.html] | |||
* Werner Kumm, Hans-Dieter Lübbers, Harald Schultz: '''Sporthochseeschifferschein''', 2. Auflage 1999, Delius Klasing, S. 16ff [http://www.delius-klasing.de/shop/detail.php4?artid=1820&thema=7&rubrik=7] | |||
* Karl-Richard Albrand, Hermann Junge: '''Formelsammlung Navigation''', DSV Verlag, S. 14 [http://www.amazon.de/Formelsammlung-Navigation-Karl-Richard-Albrand/dp/388412269X/ref=cm_taf_title_featured?ie=UTF8&tag=tellafriend-20] | |||
* Karl-Richard Albrand, Walter Stein: '''Nautische Tafeln und Formeln''', DSV Verlag, S. 73 [http://www.amazon.de/Nautische-Tafeln-Formeln-Karl-Richard-Albrand/dp/3884121480/ref=cm_taf_title_featured?ie=UTF8&tag=tellafriend-20] | |||