Rev 301 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass OdsCommune extends JRestService {const PREFIXE = 'get';/*** Méthode appelée avec une requête de type GET.**/function getElement($param = array()) {$type = $param[0];if ($type == '*' || is_numeric($type)) {$info = $this->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;}}?>