getElementParDefaut($param); } else { $methode = self::PREFIXE.$type; if (method_exists($this, $methode)) { array_shift($param); $info = $this->$methode($param); } else { $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible."; } } // Envoi sur la sortie standard $this->envoyer($info); } /** ======================= Methodes privées d'accès aux informations ================================ */ private function getElementParDefaut() { return $this->getInformationsPourCoordonnees(); } private function getInformationsPourCoordonnees($params) { $lat = $_GET['lat']; $lon = $_GET['lon']; // les erreurs sont mises sous silence car le cas où file_get_contents ne retourne rien // correspond à un cas valide où l'on a pas de données sur ses coordonnées // (ce cas est traité dans formaterTableauInformationsCoordsPourEnvoi) $url_atitude = "http://api.tela-botanica.org/service:eflore:0.1/nasa-srtm/altitude?lon=".urlencode($lon)."&lat=".urlencode($lat); $infos_altitude_json = @file_get_contents($url_atitude); $url_commune = "http://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon=".urlencode($lon)."&lat=".urlencode($lat); $infos_commune_json = @file_get_contents($url_commune); $infos_localites = $this->formaterTableauInformationsCoordsPourEnvoi($infos_altitude_json, $infos_commune_json); return $infos_localites; } private function getInformationsPourCommune($params) { $commune = $_GET['commune']; $commune = $this->remplacerNomCommunePourRecherche($commune); $requete_infos_communes = 'SELECT * FROM ods_communes WHERE oc_nom LIKE '.$this->proteger($commune).' ORDER BY oc_nom LIMIT 0,10'; $infos_communes = $this->executerRequete($requete_infos_communes); $infos_communes_formatees = $this->formaterTableauInformationsCommunePourEnvoi($infos_communes); return $infos_communes_formatees; } private function getEstUneCommunePhenoclim() { return $this->estUneCommunePhenoclim($_GET); } private function estUneCommunePhenoclim($params) { $code_insee = null; $code_postal = null; if(!isset($params['code_postal']) && !isset($params['code_insee'])) { return false; } if(isset($params['code_postal'])) { $code_postal = $params['code_postal']; } if(isset($params['code_insee'])) { $code_insee = $params['code_insee']; } if($code_postal != null) { $requete_commune_phenoclim = 'SELECT occ_code_insee FROM ods_communes_crea WHERE occ_code_postal = '.$this->proteger($code_postal); } else { $requete_commune_phenoclim = 'SELECT occ_code_insee FROM ods_communes_crea WHERE occ_code_insee = '.$this->proteger($code_insee); } $resultat_requete_phenoclim = $this->executerRequete($requete_commune_phenoclim); if(!empty($resultat_requete_phenoclim)) { return true; } return false; } private function remplacerNomCommunePourRecherche($nom) { $nom = str_replace(' ','_',$nom); $nom = str_replace('-','_',$nom); $nom .= '%'; return $nom; } private function formaterTableauInformationsCoordsPourEnvoi($infos_altitude_json, $infos_commune_json) { $infos_altitude = json_decode($infos_altitude_json); $infos_commune = json_decode($infos_commune_json); $altitude = ""; $dpt = ""; $lat = ""; $lon = ""; $altitude = ""; $code_insee = ""; $commune = ""; $commune_phenoclim = false; if(is_object($infos_altitude)) { $altitude = $infos_altitude->altitude; $altitude = number_format($altitude, 0, '', ''); $lat = $infos_altitude->latitude; $lon = $infos_altitude->longitude; } if(is_object($infos_commune)) { $commune = $infos_commune->nom; $dpt = $infos_commune->codeINSEE; $cp_recherche = $dpt; if(strlen($cp_recherche) == 4) { $cp_recherche = '0'.$cp_recherche; } $commune_phenoclim = $this->estUneCommunePhenoclim(array('code_insee' => $cp_recherche)); $cp_recherche = substr($cp_recherche,0,2); $code_insee = ''; if($commune != null) { $code_insee = $this->obtenirCodeInseeCommune($commune, $cp_recherche); } } $infos_communes = array( 'commune' => $commune, 'dpt' => $dpt, 'lat' => $lat, 'lon' => $lon, 'alt' => $altitude, 'code_insee' => $code_insee, 'commune_phenoclim' => $commune_phenoclim ); return $infos_communes; } private function formaterTableauInformationsCommunePourEnvoi($infos_communes) { $infos_formatees = array(); foreach($infos_communes as $commune) { $cp = $commune['oc_code_insee']; $limite = 2; if(strlen($cp) == 4) { $limite = 1; } $dpt = substr($cp,0,$limite); if($limite == 1) { $dpt = '0'.$dpt; } $commune_phenoclim = $this->estUneCommunePhenoclim(array('code_insee' => $commune['oc_code_insee'])); $infos_formatees[] = array( 'commune' => $commune['oc_nom'], 'dpt' => $dpt, 'lat' => $commune['oc_latitude'], 'lon' => $commune['oc_longitude'], 'alt' => $commune['oc_altitude'], 'code_insee' => $commune['oc_code_insee'], 'commune_phenoclim' => $commune_phenoclim ); } return $infos_formatees; } public function obtenirNomCommuneParCodeInsee($code_insee_commune) { if(!is_numeric($code_insee_commune)) { return ''; } $requete_infos_commune = 'SELECT * FROM ods_communes WHERE oc_code_insee = '.$this->proteger($code_insee_commune); $infos_commune = $this->executerRequete($requete_infos_commune); return $infos_commune[0]['oc_nom']; } public function obtenirTableauNomsCommunesParTableauCodesInsee($tableau_codes_insee_communes) { $noms_communes = array(); if(!empty($tableau_codes_insee_communes)) { $tableau_codes_insee_communes = array_unique($tableau_codes_insee_communes); $chaine_codes_insee = implode($tableau_codes_insee_communes,','); $requete_infos_communes = 'SELECT * FROM ods_communes WHERE oc_code_insee IN ('.$chaine_codes_insee.')'; $infos_commune = $this->executerRequete($requete_infos_communes); foreach($infos_commune as $commune) { $code_insee = $commune['oc_code_insee']; $noms_communes[$code_insee] = $commune['oc_nom']; } } return $noms_communes; } private function obtenirCodeInseeCommune($commune, $cp) { $commune = $this->remplacerNomCommunePourRecherche($commune); $requete_code_insee = 'SELECT oc_code_insee FROM ods_communes '. 'WHERE oc_nom LIKE "'.$commune.'" '. 'AND oc_code_insee LIKE "'.$cp.'%"'; $resultat_requete = $this->executerRequete($requete_code_insee); if($resultat_requete) { return $resultat_requete[0]['oc_code_insee']; } else { return ''; } } public function obtenirCommunesLieesAStationIndexeesCodeInsee() { $communes = $this->obtenirCommunesLieesAStation(); $communes_assoc = array(); foreach($communes as $commune) { $communes_assoc[$commune['oc_code_insee']] = $commune; } return $communes_assoc; } private function obtenirCommunesLieesAStation() { $requete = 'SELECT * FROM ods_communes '. 'INNER JOIN ods_stations '. 'ON oc_code_insee = os_ce_commune '; $resultat_requete = $this->executerRequete($requete); return $resultat_requete; } } ?>