Rev 1518 | Rev 1523 | 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 commande
protected $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();
$this->modifierCodeInsee();
break;
case 'sanscorrespondance' :
// devrait être être l'option utilisée dans le cron quotidien
$this->calculerCodeInseeSansCorrespondance();
$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);
$this->dao->testerActiviteConnection();
}
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) {
$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 = $this->traiterReponseServiceCommune($response);
curl_close($ch);
return $code_insee;
}
private function traiterReponseServiceCommune($response) {
$code_insee = '';
$reponse = json_decode($reponse);
// cas du service lion 1906 qui peut renvoyer plusieurs communes (on prend la première)
if(is_array($reponse)) {
$reponse = $reponse[0];
}
if (isset($reponse->codeINSEE)) {
$code_insee = $reponse->codeINSEE;
}
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;
}
}
?>