Rev 31 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpabstract class Formateur {protected $criteresRecherche;protected $bdd = null;protected $nomSource = '';public function __construct($criteresRecherche, $source) {$this->criteresRecherche = $criteresRecherche;$this->nomSource = $source;}protected function getBdd() {if (is_null($this->bdd)) {$this->bdd = new Bdd();$nomBdd = $this->nomSource == 'floradata' ? Config::get('bdd_nom_floradata') : Config::get('bdd_nom_eflore');$this->bdd->requeter("USE {$nomBdd}");}return $this->bdd;}public function recupererStations() {$stations = array();if ($this->nomSource == 'floradata' || $this->calculerNombreCriteresNonSpatiaux() > 0) {$requeteSql = $this->construireRequeteStations();$stations = $this->getBdd()->recupererTous($requeteSql);if ($this->determinerFormatRetour(count($stations)) == 'maille') {$maillage = new Maillage($this->criteresRecherche->bbox,$this->criteresRecherche->zoom, $this->nomSource);$maillage->genererMaillesVides();$maillage->ajouterStations($stations);$stations = $maillage->formaterSortie();}} else {$nombreStations = $this->obtenirNombreStationsDansBbox();if ($this->determinerFormatRetour($nombreStations) == 'maille') {$stations = $this->recupererMaillesDansBbox();} else {$requeteSql = $this->construireRequeteStations();$stations = $this->getBdd()->recupererTous($requeteSql);}}return $stations;}public function recupererWfs() {$requeteSql = $this->construireRequeteWfs();return $this->getBdd()->recupererTous($requeteSql);}protected function determinerFormatRetour($nombreStations) {$formatRetour = 'point';$zoomMaxMaillage = Config::get('zoom_maximal_maillage');if (isset($this->criteresRecherche->format) && $this->criteresRecherche->format == 'maille'&& $this->criteresRecherche->zoom <= $zoomMaxMaillage) {$formatRetour = 'maille';} else {$seuilMaillage = Config::get('seuil_maillage');if ($this->criteresRecherche->zoom <= $zoomMaxMaillage && $nombreStations > $seuilMaillage) {$formatRetour = 'maille';}}return $formatRetour;}protected function calculerNombreCriteresNonSpatiaux() {$nombreParametresNonSpatiaux = 0;$criteresAIgnorer = array('zoom', 'bbox', 'stations', 'referentiel', 'format');foreach ($this->criteresRecherche as $nomCritere => $valeur) {if (!in_array($nomCritere, $criteresAIgnorer)) {$nombreParametresNonSpatiaux ++;}}return $nombreParametresNonSpatiaux;}abstract protected function construireRequeteStations();protected function obtenirNombreStationsDansBbox() {}protected function recupererMaillesDansBbox() {}public function recupererObservations() {$requeteSql = $this->construireRequeteObservations();$observations = $this->getBdd()->recupererTous($requeteSql);if ($this->nomSource != 'floradata') {$this->recupererNumeroNomenclaturauxTaxons($observations);}$nomStation = $this->obtenirNomsStationsSurPoint();if (strlen($nomStation) == 0) {$nomStation = 'station sans nom';}for ($index = 0; $index < count($observations); $index ++) {$observations[$index]['nom_station'] = $nomStation;}return $observations;}abstract protected function construireRequeteObservations();protected function recupererNumeroNomenclaturauxTaxons(& $observations) {for ($index = 0; $index < count($observations); $index ++) {if (strlen (trim($observations[$index]['nomSci'])) == 0) {continue;}$numeroNomenclatural = isset($observations[$index]['nn']) ? $observations[$index]['nn'] : null;$referentiels = Referentiel::recupererListeReferentielsDisponibles();$taxon = null;$indexRef = 0;while ($indexRef < count($referentiels) && is_null($taxon)) {$referentiel = new Referentiel($referentiels[$indexRef]);$taxon = $referentiel->obtenirNumeroNomenclatural($observations[$index]['nomSci'],$numeroNomenclatural);$indexRef ++;}if (!is_null($taxon)) {$observations[$index]['nn'] = $taxon['nn'];$observations[$index]['nom_referentiel'] = $taxon['referentiel'];} else {$observations[$index]['nn'] = '';}}}abstract protected function obtenirNomsStationsSurPoint();}?>