Rev 34 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass FormateurWfs {const TYPE_MIME = 'text/xml';private $bbox = null;public function formaterGetCapabilities() {$nomFichierWfs = dirname(__FILE__).DS."squelettes".DS."GetCapabilities.tpl.xml";return SquelettePhp::analyser($nomFichierWfs);}public function formaterDescribeFeatureType($sources) {$nomFichierWfs = dirname(__FILE__).DS."squelettes".DS."DescribeFeatureType.tpl.xml";if (is_null($sources)) {$sources = Config::get('sources_dispo');}$listeSources = is_array($sources) == 1 ? $sources : explode(',', $sources);$item = array('listeSources' => $listeSources);return SquelettePhp::analyser($nomFichierWfs, $item);}public function formaterGetFeature(& $stations, $sources) {$nomFichierWfs = dirname(__FILE__).DS."squelettes".DS."GetFeature.tpl.xml";$this->bbox = array('ouest' => null, 'est' => null, 'sud' => null, 'nord'=> null);$stationsRetour = $this->mettreEnPageStations($stations);$listeSources = implode(',', $sources);$item = array('enveloppe' => $this->bbox, 'stations' => $stationsRetour, 'listeSources' => $listeSources);return SquelettePhp::analyser($nomFichierWfs, $item);}private function mettreEnPageStations(& $stations) {$station = array('longitude' => null, 'latitude' => null);$stationsRetour = array();foreach ($stations as $stationBdd) {if ($this->estNonNul($stationBdd['longitude']) && $this->estNonNul($stationBdd['latitude'])&& ($stationBdd['longitude'] != $station['longitude'] || $stationBdd['latitude'] != $station['latitude'])) {if (isset($station['source'])) {if ($station['source'] == 'floradata') {$this->mettreEnPageStationFloradata($station);} else {$this->mettreEnPageStationMoissonnage($station);}$stationsRetour[] = $station;}foreach ($stationBdd as $cle => $valeur) {if ($cle != 'taxon' && $cle != 'auteur') {$station[$cle] = $valeur;}}$station['taxons'] = array(trim($stationBdd['taxon']));$station['auteurs'] = array(trim($stationBdd['auteur']));$this->mettreAJourBbox($station);} else {$station['taxons'][] = trim($stationBdd['taxon']);$station['auteurs'][] = trim($stationBdd['auteur']);}}return $stationsRetour;}private function estNonNul($valeur) {return (!is_null($valeur) && strlen(trim($valeur)) > 0);}private function mettreAJourBbox($station) {if (is_null($this->bbox['sud']) || floatval($station['latitude']) < floatval($this->bbox['sud'])) {$this->bbox['sud'] = $station['latitude'];} elseif (is_null($this->bbox['nord']) || floatval($station['latitude']) > floatval($this->bbox['nord'])) {$this->bbox['nord'] = $station['latitude'];}if (is_null($this->bbox['ouest']) || floatval($station['longitude']) < floatval($this->bbox['ouest'])) {$this->bbox['ouest'] = $station['longitude'];} elseif (is_null($this->bbox['est']) || floatval($station['longitude']) > floatval($this->bbox['est'])) {$this->bbox['est'] = $station['longitude'];}}private function mettreEnPageStationFloradata(& $station) {$station['nom_station'] = trim($station['station']);if ($this->estNonNul($station['zone_geo'])) {$station['nom_station'] .= ", ".$station['zone_geo'];}$station['nom_station'] = str_replace("&", "&", trim($station['nom_station']));$station['departement'] = '';$station['code_insee'] = '';if ($this->estNonNul($station['ce_zone_geo'])) {$station['code_insee'] = substr($station['ce_zone_geo'], 8);$station['departement'] = substr($station['code_insee'],0, 2);if (intval($station['departement']) > 95) {$station['departement'] = substr($station['code_insee'],0, 2);}}unset($station['station']);unset($station['zone_geo']);unset($station['ce_zone_geo']);$station['taxons'] = str_replace("&", "&", implode(', ', $station['taxons']));$station['auteurs'] = str_replace("&", "&", implode(', ', array_unique($station['auteurs'])));}private function mettreEnPageStationMoissonnage(& $station) {$station['nom_station'] = str_replace("&", "&", trim($station['nom']));$station['departement'] = '';if ($this->estNonNul($station['code_insee'])) {$station['departement'] = substr($station['code_insee'],0, 2);if (intval($station['departement']) > 95) {$station['departement'] = substr($station['code_insee'],0, 2);}}unset($station['nom']);$station['taxons'] = str_replace("&", "&", implode(', ', $station['taxons']));$station['auteurs'] = str_replace("&", "&", implode(', ', array_unique($station['auteurs'])));}public function formaterException(Exception $erreur) {$nomFichierWfs = dirname(__FILE__).DS."squelettes".DS."Exception.tpl.xml";$item = array('message' => $erreur->getMessage());return SquelettePhp::analyser($nomFichierWfs, $item);}}?>