* @author Jean-Pascal MILCENT * @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org) * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL * @version $Id$ */ class Lion1906 extends EfloreScript { public function executer() { try { $this->initialiserProjet('lion1906'); // Lancement de l'action demandée $cmd = $this->getParametre('a'); switch ($cmd) { case 'chargerTous' : $this->chargerStructureSql(); $this->chargerMetaDonnees(); $this->chargerLion1906(); $this->preparerTable(); $this->convertirRadianEnDegre(); break; case 'convertir' : $this->preparerTable(); $this->convertirRadianEnDegre(); break; case 'supprimerTous' : $this->supprimerTous(); break; default : throw new Exception("Erreur : la commande '$cmd' n'existe pas!"); } } catch (Exception $e) { $this->traiterErreur($e->getMessage()); } } protected function chargerMetaDonnees() { $contenuSql = $this->recupererContenu(Config::get('chemins.lion1906Meta')); $this->executerScripSql($contenuSql); } private function chargerLion1906() { $chemin = Config::get('chemins.lion1906'); $table = Config::get('tables.lion1906'); $requete = "LOAD DATA INFILE '$chemin' ". "REPLACE INTO TABLE $table ". 'CHARACTER SET latin1 '. 'FIELDS '. " TERMINATED BY ';' ". " ENCLOSED BY '' ". " ESCAPED BY '\\\' ". 'IGNORE 1 LINES'; $this->getBdd()->requeter($requete); } private function convertirRadianEnDegre() { $table = Config::get('tables.lion1906'); $requete = 'SELECT insee, latitude_radian, longitude_radian '. "FROM $table "; $LatLons = $this->getBdd()->recupererTous($requete); foreach ($LatLons as $LatLon) { $insee = $LatLon['insee'] ; $latitude_degre = $LatLon['latitude_radian'] * 180 / pi(); $longitude_degre = $LatLon['longitude_radian'] * 180 / pi(); $latitude_degre = str_replace(',', '.', $latitude_degre); $longitude_degre = str_replace(',', '.', $longitude_degre); $this->formerPointCentre($latitude_degre, $longitude_degre, $insee); $this->afficherAvancement('Analyse des communes Lion1906'); } } private function preparerTable() { $table = Config::get('tables.lion1906'); $requete = "ALTER TABLE $table ". 'DROP latitude_degre, '. 'DROP longitude_degre, '. 'DROP centroide, '. 'DROP INDEX insee '; $this->getBdd()->requeter($requete); $requete = "ALTER TABLE $table ". ' ADD latitude_degre double NOT NULL , '. ' ADD longitude_degre double NOT NULL , '. ' ADD centroide point NOT NULL '; $this->getBdd()->requeter($requete); $requete = "ALTER TABLE $table ". 'ADD INDEX insee (insee, latitude_degre, longitude_degre, centroide) '; $this->getBdd()->requeter($requete); } private function formerPointCentre($latitude_degre, $longitude_degre, $insee) { $centre = "$latitude_degre $longitude_degre" ; $table = Config::get('tables.lion1906'); $requete = "UPDATE $table ". "SET latitude_degre = '$latitude_degre', longitude_degre = '$longitude_degre', ". " centroide = POINTFROMTEXT('POINT($centre)') ". "WHERE insee = '$insee' "; $this->getBdd()->requeter($requete); } private function supprimerTous() { $requete = "DROP TABLE IF EXISTS lion1906_meta, lion1906_communes_v2008"; $this->getBdd()->requeter($requete); } } ?>