Example #1
0
 /**
  * @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;
 }