New file |
0,0 → 1,193 |
<?php |
// Encodage : UTF-8 |
// +-------------------------------------------------------------------------------------------------------------------+ |
/** |
* Traitement des codes INSEE de la banque de données cel |
* |
* Description : classe permettant d'affecter des codes INSEE aux obs possédant des coordonnées mais pas de commune |
* Utilisation : php script.php code -a codeInseeCommune |
* |
* @category PHP 5.3 |
* @package phytosocio |
//Auteur original : |
* @author Delphine CAUQUIL <delphine@tela-botanica.org> |
* @author Aurélien PERONNET <aurelien@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; |
|
protected $mode_verbeux = false; |
|
// 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'); |
$this->mode_verbeux = $this->getParametre('v'); |
|
switch ($cmd) { |
case 'tout' : |
// à effectuer manuellement au premier lancement du script |
$this->creerColonne(); |
$this->calculerCodesInsee(); |
break; |
case 'colonne' : |
$this->creerColonne(); |
break; |
case 'sanscorrespondance' : |
// devrait être être l'option utilisée dans le cron quotidien (avec l'option -v 0) |
$this->calculerCodesInseeSansCorrespondance(); |
break; |
case 'calculer' : |
$this->calculerCodesInsee(); |
break; |
default : |
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd)); |
} |
} |
|
// +-------------------------------------------------------------------------------------------------------------------+ |
|
private function creerColonne() { |
$this->dao->creerColonneCodeInseeCalcule(); |
} |
|
private function calculerCodesInseeSansCorrespondance() { |
$liste_coordonnees = $this->dao->rechercherCoordonneesSansCorrespondances(); |
$this->traiterCoordonnees($liste_coordonnees); |
} |
|
private function calculerCodesInsee() { |
$liste_coordonnees = $this->dao->rechercherCoordonnees(); |
$this->traiterCoordonnees($liste_coordonnees); |
} |
|
private function traiterCoordonnees($liste_coordonnees) { |
|
$debut = microtime(true); |
$nb_coordonnees_modifiees = 0; |
$nb_coordonnees_ignorees = 0; |
$total = count($liste_coordonnees); |
|
if($this->mode_verbeux) { |
echo "-------------------------------------------------------------------\n"; |
echo " Calcul des codes INSEE et modification (".count($liste_coordonnees)." coordonnées en tout) ... \n"; |
echo " Enrichissement des champs zone geo et ce_zone_geo vides ... \n"; |
echo "-------------------------------------------------------------------\n"; |
} |
|
foreach ($liste_coordonnees as $coordonnees) { |
$infos_coord = $this->obtenirInfosPourCoordonnees($coordonnees); |
if ($infos_coord != null) { |
$coordonnee_a_traiter = array( |
'latitude' => $coordonnees['latitude'], |
'longitude' => $coordonnees['longitude'], |
'code_insee' => $infos_coord['code_insee'], |
'nom' => $infos_coord['nom'] |
); |
$this->modifierInformationsGeo($coordonnee_a_traiter); |
$nb_coordonnees_modifiees++; |
} else { |
$nb_coordonnees_ignorees++; |
} |
if($this->mode_verbeux) { |
$this->afficherAvancement(' Coordonnées traitées ', $nb_coordonnees_modifiees); |
} |
} |
|
$fin = microtime(true); |
if($this->mode_verbeux) { |
echo "\n"; |
echo "-------------------------------------------------------------------\n"; |
echo " Fin de la mise à jour des codes INSEE calculés et de l'enrichissement, \n"; |
echo " ".($fin - $debut)." secondes écoulées \n"; |
echo " ".$nb_coordonnees_modifiees." code insee calculés et modifiés \n"; |
echo " ".$nb_coordonnees_ignorees." coordonnées ignorées \n"; |
echo "-------------------------------------------------------------------\n"; |
echo "\n"; |
} |
} |
|
private function obtenirInfosPourCoordonnees($coordonnees) { |
$infos_coord = null; |
if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) { |
$infos_coord = $this->chercherInfosCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']); |
if ($infos_coord == null) { |
$infos_coord = $this->chercherInfosCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']); |
} |
} |
return $infos_coord; |
} |
|
private function modifierInformationsGeo($coordonnee_a_traiter) { |
$this->modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter); |
$this->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter); |
} |
|
private function modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter) { |
$this->dao->testerActiviteConnection(); |
$this->dao->ajouterCodeInseeCalcule($coordonnee_a_traiter['latitude'], $coordonnee_a_traiter['longitude'], $coordonnee_a_traiter['code_insee']); |
} |
|
private function modifierCodeInseeEtZoneGeo($coordonnee_a_traiter) { |
$this->dao->testerActiviteConnection(); |
$this->dao->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter); |
} |
|
private function chercherInfosCommune($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); |
|
$infos_coord = $this->traiterReponseServiceCommune($reponse); |
curl_close($ch); |
|
return $infos_coord; |
} |
|
private function traiterReponseServiceCommune($reponse) { |
$retour = null; |
$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)) { |
$retour = array('code_insee' => $reponse->codeINSEE, |
'nom' => $reponse->nom); |
} |
return $retour; |
} |
|
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; |
} |
} |
?> |