Example #1
0
 /**
  * @param $spot :spot dont il est question
  * @param $em: Entity Manager, pour utiliser doctrine
  * @return $tabNbHoure : tableau contenant une date par ligne, puis une colonne pour chaque heure ouverte à la nav :
  *      - l'état des marées,
  *      - les prévisions
  */
 static function createTabNbHoureNav($spot, $em)
 {
     $tabDataNbHoureNav = array();
     $tabDataMeteo = array();
     // Pour les 7 prochains jours
     $day = new \DateTime("now");
     for ($nbPrevision = 0; $nbPrevision < 7; $nbPrevision++) {
         $tabHoure = array();
         for ($houre = CreateNbHoureCommand::HEURE_MATIN; $houre < CreateNbHoureCommand::HEURE_SOIR; $houre++) {
             $tabHoure[$houre] = array();
         }
         $tabDataNbHoureNav[$day->format('Y-m-d')] = $tabHoure;
         $tabDataMeteo[$day->format('Y-m-d')] = array();
         $day->modify('+1 day');
     }
     //********** Marée **********
     // récupére les futures marées
     $listeMareeFuture = $em->getRepository('LaPoizWindBundle:MareeDate')->getFuturMaree($spot);
     foreach ($listeMareeFuture as $mareeDate) {
         // Pour chaque jour, calculer pour chaque heure le temps de navigation
         MareeTools::calculNbHoureNav($spot, $tabDataNbHoureNav[$mareeDate->getDatePrev()->format('Y-m-d')], $mareeDate);
     }
     //********** Wind ***********
     // Récupere toutes les futures prévisions de vent pour le spot
     $listALlPrevisionDate = $em->getRepository('LaPoizWindBundle:PrevisionDate')->getPrevDateAllWebSiteNextDays($spot);
     $tabAllPrevisionDate = array();
     // Construit un tableau ayant des cellules contenant toutes les previsions des differents sites par jour pour le spot
     foreach ($listALlPrevisionDate as $previsionDate) {
         $tabAllPrevisionDate[$previsionDate->getDatePrev()->format('Y-m-d')][] = $previsionDate;
     }
     // $tabAllPrevisionDate with data
     foreach ($tabDataNbHoureNav as $keyDate => $toto) {
         if (array_key_exists($keyDate, $tabAllPrevisionDate)) {
             //$noteDate = ManageNote::getNotesDate($spot,\DateTime::createFromFormat('Y-m-d',$keyDate), $em);
             NbHoureWind::calculNbHoureNav($spot, $tabDataNbHoureNav[$keyDate], $tabAllPrevisionDate[$keyDate]);
         }
     }
     //********** Meteo ***********
     // Récupere la météo (T°C, nuage ....) pour le spot qui sera utilisé pour noter l'agréabilité
     foreach ($tabDataNbHoureNav as $keyDate => $toto) {
         if (array_key_exists($keyDate, $tabAllPrevisionDate)) {
             foreach ($tabAllPrevisionDate[$keyDate] as $previsionDate) {
                 // pour chaque website = $previsionDate (même spot, même jour)
                 if ($previsionDate->getDataWindPrev()->getWebSite()->getNom() == WebsiteGetData::meteoFranceName) {
                     foreach ($previsionDate->getListPrevision() as $prevision) {
                         $houre = intval($prevision->getTime()->format('H'));
                         if (NbHoureWind::isInGoodTime($houre)) {
                             $tabDataMeteo[$keyDate][$houre] = array();
                             $tabDataMeteo[$keyDate][$houre]["temp"] = $prevision->getTemp();
                             $tabDataMeteo[$keyDate][$houre]["meteo"] = $prevision->getMeteo();
                             $tabDataMeteo[$keyDate][$houre]["precipitation"] = $prevision->getPrecipitation();
                         }
                     }
                 }
             }
         }
     }
     return array($tabDataNbHoureNav, $tabDataMeteo);
 }
Example #2
0
 /**
  * @param $spot
  * @param $tabHoure : array $tabHoure[$nbHoure] for the day
  * @param $mareeDate : prévision de marre que l'on va analyser
  * Remplis le $tabHoure avec le temps de navigation possible pour chaque heure=elem du tab
  */
 static function calculNbHoureMaree($spot, $tabHoure, $mareeDate)
 {
     $listePrevisionMaree = $mareeDate->getListPrevision();
     // liste des marées extreme de la journée
     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 de nav par heure
         MareeTools::calculNbHoureNav($listePrevisionMaree, $spot, $tabHoure);
     }
 }
 /**
  * @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;
 }
Example #4
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;
 }
Example #5
0
 /**
  * On est calé sur $tInterMin en pente montante
  * On calcul l'ensemble du temps de la restriction avec restriction Max et restriction Min
  */
 static function calculTimeRestrictionFromTInterMin($tInterMin, $periode, $timeToAdd, $timeInter2tInterMax, $tEnd, $timeRestriction, $timeTab)
 {
     $t = $tInterMin;
     if ($t < $tEnd) {
         if ($t + $timeToAdd <= $tEnd) {
             // cas normal on ajoute $timeToAdd
             $timeRestriction += $timeToAdd;
             $timeTab[] = array("begin" => date("H:i:s", $t), "end" => date("H:i:s", $t + $timeToAdd));
             $t = $t + $timeToAdd;
             // $t = $tInterMax
             // On va jusqu'à l'autre $tInterMax (pente descendante)
             $t = $t + $timeInter2tInterMax;
             if ($t + $timeToAdd <= $tEnd) {
                 // On peut ajouter $timeToAdd
                 $timeRestriction += $timeToAdd;
                 $timeTab[] = array("begin" => date("H:i:s", $t), "end" => date("H:i:s", $t + $timeToAdd));
                 $t = $t + $timeToAdd;
                 //$t est sur $tInterMin pente descendente
                 $t = $tInterMin + $periode;
                 // $t est sur $tinterMin pente montante
                 return MareeTools::calculTimeRestrictionFromTInterMin($t, $periode, $timeToAdd, $timeInter2tInterMax, $tEnd, $timeRestriction, $timeTab);
             } else {
                 //$t+$timeToAdd>$tEnd
                 if ($t < $tEnd) {
                     // $tEnd est entre $tInterMax et $tInterMin, cad entre $t et $t+$timeToAdd (pente descendante)
                     $timeRestriction += $tEnd - $t;
                     $timeTab[] = array("begin" => date("H:i:s", $t), "end" => date("H:i:s", $tEnd));
                 }
                 return array($timeRestriction, $timeTab);
             }
         } else {
             // $tEnd est entre $tInterMin et $tInterMax, cad entre $t et $t+$timeToAdd (pente montante)
             $timeRestriction += $tEnd - $t;
             $timeTab[] = array("begin" => date("H:i:s", $t), "end" => date("H:i:s", $tEnd));
             return array($timeRestriction, $timeTab);
         }
     } else {
         return array($timeRestriction, $timeTab);
     }
 }