Rev 1515 | Rev 1518 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// Encodage : UTF-8// +-------------------------------------------------------------------------------------------------------------------+/*** Traitement des fichiers de la banque de données SOPHY pour insertion** Description : classe permettant d'insérer les tableaux phytosociologiques de la banque de données SOPHY* Utilisation : php script.php code -a codeInseeCommune** @category PHP 5.3* @package phytosocio//Auteur original :* @author Delphine CAUQUIL <delphine@tela-botanica.org>* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2* @version $Id$*/// +-------------------------------------------------------------------------------------------------------------------+class Codeinseecommune extends Script {protected $tableauTaxon;protected $dao;protected $observations;// Paramêtres autorisées lors de l'appel au script en ligne de commandeprotected $parametres_autorises = array('-n' => array(true, true, 'Nom du fichier ou du dossier à traiter'));// +-------------------------------------------------------------------------------------------------------------------+public function executer() {include_once dirname(__FILE__).'/bibliotheque/Dao.php';$this->dao = new Dao();// Récupération de paramétres// Lancement de l'action demandée$cmd = $this->getParametre('a');switch ($cmd) {case 'tout' :// à effectuer manuellement au premier lancement du script$this->creerColonne();$this->calculerCodeInsee();// modifierCodeInsee semble poser problème sur le serveur après beaucoup de requetes//$this->modifierCodeInsee();break;case 'sanscorrespondance' :// devrait être être l'option utilisée dans le cron quotidien$this->calculerCodeInseeSansCorrespondance();// modifierCodeInsee semble poser problème sur le serveur après beaucoup de requetes//$this->modifierCodeInsee();break;case 'colonne' :$this->creerColonne();break;case 'calculer' :$this->calculerCodeInsee();break;case 'modifier' :$this->modifierCodeInsee();break;default :$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));}}// +-------------------------------------------------------------------------------------------------------------------+private function creerColonne() {$this->dao->creerColonneCodeInseeCalculee();}private function calculerCodeInseeSansCorrespondance() {$liste_coordonnees = $this->dao->rechercherCoordonneesSansCorrespondances();$this->traiterCoordonnees($liste_coordonnees);}private function calculerCodeInsee() {$liste_coordonnees = $this->dao->rechercherCoordonnees();$this->traiterCoordonnees($liste_coordonnees);}private function traiterCoordonnees($liste_coordonnees) {echo "-------------------------------------------------------------------\n";echo " Traitement et calcul des codes INSEE (".count($liste_coordonnees)." coordonnées en tout) ... \n";echo "-------------------------------------------------------------------\n";$debut = microtime(true);$i = 0;$total = count($liste_coordonnees);foreach ($liste_coordonnees as $coordonnees) {if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) {$code_insee = $this->chercherCodeCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']);if ($code_insee != "") {$this->dao->ajouterCodeInseeCalculee($coordonnees['latitude'], $coordonnees['longitude'], $code_insee);} else {$code_insee = $this->chercherCodeCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']);if ($code_insee != "") {$this->dao->ajouterCodeInseeCalculee($coordonnees['latitude'], $coordonnees['longitude'], $code_insee);}}}$i++;$this->afficherAvancement(' Lignes traitées ', $i);}echo "\n";$fin = microtime(true);echo "-------------------------------------------------------------------\n";echo " Fin du traitement, ".($fin - $debut)." secondes écoulées \n";echo "-------------------------------------------------------------------\n";echo "\n";}private function modifierCodeInsee() {$this->dao->modifierCodeInsee();}private function chercherCodeCommune($projet, $latitude, $longitude) {$code_insee = '';$url_service = "www.tela-botanica.org/service:eflore:0.1/{$projet}/nom-commune"."?lat={$latitude}&lon={$longitude}";$url_service = str_replace(',', '.', $url_service);$ch = curl_init($url_service);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$reponse = curl_exec($ch);$reponse = json_decode($reponse);if (isset($reponse->codeINSEE)) {$code_insee = $reponse->codeINSEE;}curl_close($ch);return $code_insee;}private function testerCoordonneesWgsFrance($latitude, $longitude) {$coord_france = false;if ($latitude != '' && $longitude != '') {if ($latitude < 51.071667 && $latitude > 41.316667) {if ($longitude < 9.513333 && $longitude > -5.140278) {$coord_france = true;}}}return $coord_france;}private function analyserCodeDeptComm($ligneDecoupe) {if (preg_match('/^\d{2}$/', $ligneDecoupe['codeDept'])) {} elseif (preg_match('/^\s{0,1}\d{1,2}\s{0,1}$/',$ligneDecoupe['codeDept'])) {$ligneDecoupe['codeDept'] = str_replace(' ', '0', $ligneDecoupe['codeDept']);} else {$ligneDecoupe['codeDept'] = null;}if (preg_match('/^\d{3}$/', $ligneDecoupe['codeCommune'])) {} elseif (preg_match('/^\s{0,2}\d{1,2,3}\s{0,2}$/', $ligneDecoupe['codeCommune'])) {$ligneDecoupe['codeCommune'] = str_replace(' ', '0', $ligneDecoupe['codeCommune']);} elseif ($ligneDecoupe['codeDept'] == null) {$ligneDecoupe['codeCommune'] = null;} else {$ligneDecoupe['codeCommune'] = '000';}return $ligneDecoupe;}private function analyserCoordGrdParis($ligneDecoupe, $ligne) {if (preg_match('/[\s0]0\.000/', $ligneDecoupe['latitude'], $match)) {$ligneDecoupe['latitude'] = null;$ligneDecoupe['longitude'] = null;} elseif (preg_match('/\d{1,2}\.\d{2,3}/', $ligneDecoupe['latitude'], $match)) {// format souhaité$ligneDecoupe['latitude_wgs'] = round($ligneDecoupe['latitude']*0.9, 7);$ligneDecoupe['longitude_wgs'] = round($ligneDecoupe['longitude']*0.9+2.3372291, 7);} elseif (preg_match('/(\d{2})[\d\s,](\d{3})/', $ligneDecoupe['latitude'], $match)) {//erreur de saisie$ligneDecoupe['latitude'] = $match[1].'.'.$match[2];$ligneDecoupe['latitude_wgs'] = round($ligneDecoupe['latitude']*0.9, 7);$ligneDecoupe['longitude_wgs'] = round($ligneDecoupe['longitude']*0.9 + 2.3372291, 7);} elseif (preg_match('/^[a-zA-Z\s]*[a-zA-Z][a-zA-Z\s]*$/', $ligneDecoupe['latitude'])) {// lat absente + nom long$ligneDecoupe['nomStation'] = rtrim(substr($ligne, 10, 48));$ligneDecoupe['latitude'] = null;$ligneDecoupe['longitude'] = null;} elseif (preg_match('/.[AO].123/', $ligneDecoupe['latitude'], $match)) {$ligneDecoupe['latitude'] = null;$ligneDecoupe['longitude'] = null;} elseif ($ligneDecoupe['latitude'] != null) {$ligneDecoupe['latitude'] = null;$ligneDecoupe['longitude'] = null;}return $ligneDecoupe;}}?>