/** * @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); }
private static function generateTabNbHourNav($prevision, $tabRosaceOrientation) { $orientation = $prevision->getOrientation(); $windTab = array(); $windTab['orientation'] = $tabRosaceOrientation[$orientation]; $windTab['wind'] = $prevision->getWind(); $windTab['timeNav'] = NbHoureWind::calculNbHoureNavigation($tabRosaceOrientation[$orientation], $prevision->getWind()); return $windTab; }