Subversion Repositories eFlore/Applications.cel

Rev

Rev 1523 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1523 Rev 2414
Line 1... Line 1...
1
<?php
1
<?php
2
// Encodage : UTF-8
2
// declare(encoding='UTF-8');
3
// +-------------------------------------------------------------------------------------------------------------------+
-
 
4
/**
3
/**
5
 * Traitement des codes INSEE de la banque de données cel
4
 * Traitement des codes INSEE de la base de données CEL
-
 
5
 * Permet d'affecter des codes INSEE aux obs possédant des coordonnées mais pas de commune.
6
 *
6
 *
-
 
7
 * Utilisation :
-
 
8
 * - Pour ? : <code>/opt/lamp/bin/php cli.php code_insee_commune -a tout</code>
-
 
9
 * - Pour ? : <code>/opt/lamp/bin/php cli.php code_insee_commune -a colonne</code>
7
 * Description : classe permettant d'affecter des codes INSEE aux obs possédant des coordonnées mais pas de commune
10
 * - Pour ? : <code>/opt/lamp/bin/php cli.php code_insee_commune -a sanscorrespondance</code>
8
 * Utilisation : php script.php code -a codeInseeCommune
11
 * - Pour ? : <code>/opt/lamp/bin/php cli.php code_insee_commune -a calculer</code>
9
 *
12
 *
10
 * @category		PHP 5.3
13
 * @category   CEL
11
 * @package		phytosocio
14
 * @package    Scripts
12
 //Auteur original :
15
 * @subpackage Génération Images
13
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
16
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
14
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
17
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
15
 * @copyright	Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
18
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
16
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
19
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
17
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
20
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
18
 * @version		$Id$
21
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
19
 */
22
 */
20
// +-------------------------------------------------------------------------------------------------------------------+
23
include_once dirname(__FILE__).'/bibliotheque/Dao.php';
-
 
24
 
21
class Codeinseecommune extends Script {
25
class CodeInseeCommune extends Script {
22
	
26
 
23
	protected $tableauTaxon;
27
	protected $tableauTaxon;
24
	protected $dao;
28
	protected $dao;
25
	protected $observations;
29
	protected $observations;
26
	
30
 
27
	protected $mode_verbeux = false;
31
	protected $mode_verbeux = false;
28
	
32
 
29
	// Paramêtres autorisées lors de l'appel au script en ligne de commande
33
	// Paramêtres autorisées lors de l'appel au script en ligne de commande
30
	protected $parametres_autorises = array(
34
	protected $parametres_autorises = array(
31
		'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter'));
35
		'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter'));
Line 32... Line -...
32
 
-
 
33
// +-------------------------------------------------------------------------------------------------------------------+
36
 
34
	public function executer() {
-
 
35
		include_once dirname(__FILE__).'/bibliotheque/Dao.php';
37
	public function executer() {
36
	
38
 
37
		$this->dao = new Dao();
39
		$this->dao = new Dao();
38
		// Récupération de paramétres
40
		// Récupération de paramétres
39
		// Lancement de l'action demandée
41
		// Lancement de l'action demandée
40
		$cmd = $this->getParametre('a');
42
		$cmd = $this->getParametre('a');
41
		$this->mode_verbeux = $this->getParametre('v');
43
		$this->mode_verbeux = $this->getParametre('v');
42
		
44
 
43
		switch ($cmd) {
45
		switch ($cmd) {
44
			case 'tout' :
46
			case 'tout' :
45
				// à effectuer manuellement au premier lancement du script
47
				// à effectuer manuellement au premier lancement du script
46
				$this->creerColonne();
48
				$this->creerColonne();
Line 59... Line 61...
59
			default :
61
			default :
60
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
62
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
61
		}
63
		}
62
	}
64
	}
Line 63... Line -...
63
 
-
 
64
// +-------------------------------------------------------------------------------------------------------------------+
-
 
65
 
65
 
66
	private function creerColonne() {
66
	private function creerColonne() {
67
		$this->dao->creerColonneCodeInseeCalcule();
67
		$this->dao->creerColonneCodeInseeCalcule();
68
	}
68
	}
69
	
69
 
70
	private function calculerCodesInseeSansCorrespondance() {
70
	private function calculerCodesInseeSansCorrespondance() {
71
		$liste_coordonnees = $this->dao->rechercherCoordonneesSansCorrespondances();
71
		$liste_coordonnees = $this->dao->rechercherCoordonneesSansCorrespondances();
72
		$this->traiterCoordonnees($liste_coordonnees);
72
		$this->traiterCoordonnees($liste_coordonnees);
73
	}
73
	}
74
	
74
 
75
	private function calculerCodesInsee() {
75
	private function calculerCodesInsee() {
76
		$liste_coordonnees = $this->dao->rechercherCoordonnees();
76
		$liste_coordonnees = $this->dao->rechercherCoordonnees();
77
		$this->traiterCoordonnees($liste_coordonnees);
77
		$this->traiterCoordonnees($liste_coordonnees);
78
	}
78
	}
79
	
79
 
80
	private function traiterCoordonnees($liste_coordonnees) {
-
 
81
		
80
	private function traiterCoordonnees($liste_coordonnees) {
82
		$debut = microtime(true);
81
		$debut = microtime(true);
83
		$nb_coordonnees_modifiees = 0;
82
		$nb_coordonnees_modifiees = 0;
84
		$nb_coordonnees_ignorees = 0;
83
		$nb_coordonnees_ignorees = 0;
85
		$total = count($liste_coordonnees);
84
		$total = count($liste_coordonnees);
86
		
85
 
87
		if($this->mode_verbeux) {
86
		if ($this->mode_verbeux) {
88
			echo "-------------------------------------------------------------------\n";
87
			echo "-------------------------------------------------------------------\n";
89
			echo "  Calcul des codes INSEE et modification (".count($liste_coordonnees)." coordonnées en tout) ... \n";
88
			echo "  Calcul des codes INSEE et modification (".count($liste_coordonnees)." coordonnées en tout) ... \n";
90
			echo "  Enrichissement des champs zone geo et ce_zone_geo vides ... \n";
89
			echo "  Enrichissement des champs zone geo et ce_zone_geo vides ... \n";
91
			echo "-------------------------------------------------------------------\n";
90
			echo "-------------------------------------------------------------------\n";
92
		}
91
		}
93
				
92
 
94
		foreach ($liste_coordonnees as $coordonnees) {
93
		foreach ($liste_coordonnees as $coordonnees) {
95
			$infos_coord = $this->obtenirInfosPourCoordonnees($coordonnees);
94
			$infos_coord = $this->obtenirInfosPourCoordonnees($coordonnees);
96
			if ($infos_coord != null) {
95
			if ($infos_coord != null) {
97
				$coordonnee_a_traiter = array(
96
				$coordonnee_a_traiter = array(
98
					'latitude' => $coordonnees['latitude'], 
97
					'latitude' => $coordonnees['latitude'],
99
					'longitude' => $coordonnees['longitude'],
98
					'longitude' => $coordonnees['longitude'],
100
					'code_insee' => $infos_coord['code_insee'],
99
					'code_insee' => $infos_coord['code_insee'],
101
					'nom' => $infos_coord['nom']	
100
					'nom' => $infos_coord['nom']
102
				);
101
				);
103
				$this->modifierInformationsGeo($coordonnee_a_traiter);
102
				$this->modifierInformationsGeo($coordonnee_a_traiter);
104
				$nb_coordonnees_modifiees++;
103
				$nb_coordonnees_modifiees++;
105
			} else {
104
			} else {
106
				$nb_coordonnees_ignorees++;
105
				$nb_coordonnees_ignorees++;
107
			}
106
			}
108
			if($this->mode_verbeux) {
107
			if ($this->mode_verbeux) {
109
				$this->afficherAvancement('  Coordonnées traitées ', $nb_coordonnees_modifiees);
108
				$this->afficherAvancement('  Coordonnées traitées ', $nb_coordonnees_modifiees);
110
			}
109
			}
111
		}
110
		}
112
		
111
 
113
		$fin = microtime(true);
112
		$fin = microtime(true);
114
		if($this->mode_verbeux) {
113
		if ($this->mode_verbeux) {
115
			echo "\n";
114
			echo "\n";
116
			echo "-------------------------------------------------------------------\n";
115
			echo "-------------------------------------------------------------------\n";
117
			echo "  Fin de la mise à jour des codes INSEE calculés et de l'enrichissement, \n";
116
			echo "  Fin de la mise à jour des codes INSEE calculés et de l'enrichissement, \n";
118
			echo "  ".($fin - $debut)." secondes écoulées \n";
117
			echo "  ".($fin - $debut)." secondes écoulées \n";
119
			echo "  ".$nb_coordonnees_modifiees." code insee calculés et modifiés \n";
118
			echo "  ".$nb_coordonnees_modifiees." code insee calculés et modifiés \n";
120
			echo "  ".$nb_coordonnees_ignorees." coordonnées ignorées \n";
119
			echo "  ".$nb_coordonnees_ignorees." coordonnées ignorées \n";
121
			echo "-------------------------------------------------------------------\n";
120
			echo "-------------------------------------------------------------------\n";
122
			echo "\n";
121
			echo "\n";
123
		}
122
		}
124
	}
123
	}
125
	
124
 
126
	private function obtenirInfosPourCoordonnees($coordonnees) {
125
	private function obtenirInfosPourCoordonnees($coordonnees) {
127
		$infos_coord = null;
126
		$infos_coord = null;
128
		if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) {
127
		if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) {
129
			$infos_coord = $this->chercherInfosCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']);
128
			$infos_coord = $this->chercherInfosCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']);
130
			if ($infos_coord == null) {
129
			if ($infos_coord == null) {
131
				$infos_coord = $this->chercherInfosCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']);
130
				$infos_coord = $this->chercherInfosCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']);
132
			}
131
			}
133
		}
132
		}
134
		return $infos_coord;
133
		return $infos_coord;
135
	}
134
	}
136
	
135
 
137
	private function modifierInformationsGeo($coordonnee_a_traiter) {
136
	private function modifierInformationsGeo($coordonnee_a_traiter) {
138
		$this->modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter);
137
		$this->modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter);
139
		$this->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter);
138
		$this->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter);
140
	}
139
	}
141
	
140
 
142
	private function modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter) {
141
	private function modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter) {
143
		$this->dao->testerActiviteConnection();
142
		$this->dao->testerActiviteConnection();
144
		$this->dao->ajouterCodeInseeCalcule($coordonnee_a_traiter['latitude'], $coordonnee_a_traiter['longitude'], $coordonnee_a_traiter['code_insee']);
143
		$this->dao->ajouterCodeInseeCalcule($coordonnee_a_traiter['latitude'], $coordonnee_a_traiter['longitude'], $coordonnee_a_traiter['code_insee']);
145
	}
144
	}
146
		
145
 
147
	private function modifierCodeInseeEtZoneGeo($coordonnee_a_traiter) {
146
	private function modifierCodeInseeEtZoneGeo($coordonnee_a_traiter) {
148
			$this->dao->testerActiviteConnection();
147
		$this->dao->testerActiviteConnection();
149
			$this->dao->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter);
148
		$this->dao->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter);
150
	}
149
	}
151
	
150
 
152
	private function chercherInfosCommune($projet, $latitude, $longitude) {
151
	private function chercherInfosCommune($projet, $latitude, $longitude) {
153
		$url_service = "www.tela-botanica.org/service:eflore:0.1/{$projet}/nom-commune".
152
		$url_service = "www.tela-botanica.org/service:eflore:0.1/{$projet}/nom-commune".
154
					"?lat={$latitude}&lon={$longitude}";
153
			"?lat={$latitude}&lon={$longitude}";
155
		
154
 
156
		$url_service = str_replace(',', '.', $url_service);
155
		$url_service = str_replace(',', '.', $url_service);
157
		$ch = curl_init($url_service);
156
		$ch = curl_init($url_service);
158
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
157
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
159
		$reponse = curl_exec($ch);
158
		$reponse = curl_exec($ch);
160
		
159
 
161
		$infos_coord = $this->traiterReponseServiceCommune($reponse);
160
		$infos_coord = $this->traiterReponseServiceCommune($reponse);
162
		curl_close($ch);
161
		curl_close($ch);
163
		
162
 
164
		return $infos_coord;
163
		return $infos_coord;
Line 165... Line 164...
165
	}
164
	}
166
 
165
 
167
	private function traiterReponseServiceCommune($reponse) {
166
	private function traiterReponseServiceCommune($reponse) {
168
		$retour = null;
167
		$retour = null;
169
		$reponse = json_decode($reponse);
168
		$reponse = json_decode($reponse);
170
		// cas du service lion 1906 qui peut renvoyer plusieurs communes (on prend la première)
169
		// cas du service lion 1906 qui peut renvoyer plusieurs communes (on prend la première)
171
		if(is_array($reponse)) {
170
		if (is_array($reponse)) {
172
			$reponse = $reponse[0];
171
			$reponse = $reponse[0];
173
		}
172
		}
174
		if (isset($reponse->codeINSEE)) {
173
		if (isset($reponse->codeINSEE)) {
175
			$retour = array('code_insee' => $reponse->codeINSEE,
174
			$retour = array('code_insee' => $reponse->codeINSEE,
176
							'nom' => $reponse->nom);
175
							'nom' => $reponse->nom);
177
		} 
176
		}
178
		return $retour;
177
		return $retour;
179
	}
178
	}
180
	
179
 
181
	private function testerCoordonneesWgsFrance($latitude, $longitude) {
180
	private function testerCoordonneesWgsFrance($latitude, $longitude) {
182
		$coord_france = false;
181
		$coord_france = false;
183
		if ($latitude != '' && $longitude != '') {
182
		if ($latitude != '' && $longitude != '') {
Line 187... Line 186...
187
				}
186
				}
188
			}
187
			}
189
		}
188
		}
190
		return $coord_france;
189
		return $coord_france;
191
	}
190
	}
192
}
-
 
193
?>
-
 
194
191
}
-
 
192
195
193