/** * @param $spot * @param $mareeDate : prévision de marre que l'on va analyser * @return: Array: un tableau contenant la liste des plages horaires OK, KO et Warn */ private static function getPlageRestriction($spot, $mareeDate) { $mareeStateArray = array(); $listePrevisionMaree = $mareeDate->getListPrevision(); if ($listePrevisionMaree != null && count($listePrevisionMaree) >= 2) { // pour chaque $restriction de $spot->getMareeRestriction() foreach ($spot->getMareeRestriction() as $mareeRestriction) { list($timeInState, $timeTab) = MareeTools::calculTimeInState($mareeRestriction, $listePrevisionMaree); $mareeStateArray[$mareeRestriction->getState()] = $timeTab; } } return $mareeStateArray; }
/** * @param $spot * @param $tabNotes : array $tabNotes['Y-m-d'] for next 7 days * @param $mareeDate : prévision de marre que l'on va analyser * return: la note vis à vis de la marée */ static function calculNoteMaree($spot, $tabNotes, $mareeDate) { // vérifie que $mareeDate->getDatePrev() soit dans $tabNotes if (NoteMaree::isInTabNotes($tabNotes, $mareeDate->getDatePrev()) && $spot->getMareeRestriction() != null) { $listePrevisionMaree = $mareeDate->getListPrevision(); if ($listePrevisionMaree != null && count($listePrevisionMaree) >= 2) { // *** Calcul de la formule de la courbe: y = a sin(wt + Phi) + b *** // t=time en seconde, y=hauteur en metre, w: phase 2 pi / T , T: fréquence // résolution de l'équation // *** calcul le temps ou la marée est OK, warn et OK *** $timeMareeOK = 0; $timeMareeWarn = 0; $timeMareeKO = 0; $timeMareeOKTab = array(); $timeMareeWarnTab = array(); $timeMareeKOTab = array(); // pour chaque $restriction de $spot->getMareeRestriction() foreach ($spot->getMareeRestriction() as $mareeRestriction) { // calcul l'heure (minute) d'intersection pour calculer le temps dans l'etat list($timeInState, $timeTab) = MareeTools::calculTimeInState($mareeRestriction, $listePrevisionMaree); $mareeState = $mareeRestriction->getState(); switch ($mareeState) { case "OK": $timeMareeOK += $timeInState; $timeMareeOKTab = $timeTab; break; case "KO": $timeMareeKO += $timeInState; $timeMareeKOTab = $timeTab; break; case "warn": $timeMareeWarn += $timeInState; $timeMareeWarnTab = $timeTab; break; } } // calcul de la note vis à vis de du temps de navigation / temps etat ok, warn et KO $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["marée"] = NoteMaree::getNote($timeMareeOK, $timeMareeWarn, $timeMareeKO); $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["maréeTimeOK"] = $timeMareeOKTab; $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["maréeTimeWarn"] = $timeMareeWarnTab; $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["maréeTimeKO"] = $timeMareeKOTab; } } return $tabNotes; }