Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 150 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 150 Rev 349
1
<?php
1
<?php
2
//declare(encoding='UTF-8');
2
//declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe permettant de :
4
 * Classe permettant de :
5
 *  - convertir la latitude et longitude en degre, et rajouter l'objet point centroide de la commune.
5
 *  - convertir la latitude et longitude en degre, et rajouter l'objet point centroide de la commune.
6
 *  - charger la bdd
6
 *  - charger la bdd
7
 * Exemple de lancement du script : :
7
 * Exemple de lancement du script : :
8
 * /opt/lampp/bin/php cli.php lion1906 -a chargerTous
8
 * /opt/lampp/bin/php cli.php lion1906 -a chargerTous
9
 *
9
 *
10
 * @category	php 5.2
10
 * @category	php 5.2
11
 * @package		eFlore/Scripts
11
 * @package		eFlore/Scripts
12
 * @author		Mohcen BENMOUNAH <mohcen@tela-botanica.org>
12
 * @author		Mohcen BENMOUNAH <mohcen@tela-botanica.org>
13
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
14
 * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
14
 * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
15
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
15
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
16
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
16
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
17
 * @version		$Id$
17
 * @version		$Id$
18
 */
18
 */
19
class Lion1906 extends EfloreScript {
19
class Lion1906 extends EfloreScript {
20
 
20
 
21
	public function executer() {
21
	public function executer() {
22
		try {
22
		try {
23
			$this->initialiserProjet('lion1906');
23
			$this->initialiserProjet('lion1906');
24
 
24
 
25
			// Lancement de l'action demandée
25
			// Lancement de l'action demandée
26
			$cmd = $this->getParametre('a');
26
			$cmd = $this->getParametre('a');
27
			switch ($cmd) {
27
			switch ($cmd) {
28
				case 'chargerTous' :
28
				case 'chargerTous' :
29
					$this->chargerStructureSql();
29
					$this->chargerStructureSql();
30
					$this->chargerMetaDonnees();
30
					$this->chargerMetaDonnees();
31
					$this->chargerLion1906();
31
					$this->chargerLion1906();
32
					$this->preparerTable();
32
					$this->preparerTable();
33
					$this->convertirRadianEnDegre();
33
					$this->convertirRadianEnDegre();
34
					break;
34
					break;
35
				case 'convertir' :
35
				case 'convertir' :
36
					$this->preparerTable();
36
					$this->preparerTable();
37
					$this->convertirRadianEnDegre();
37
					$this->convertirRadianEnDegre();
38
					break;
38
					break;
39
				case 'supprimerTous' :
39
				case 'supprimerTous' :
40
					$this->supprimerTous();
40
					$this->supprimerTous();
41
					break;
41
					break;
42
				default :
42
				default :
43
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
43
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
44
			}
44
			}
45
		} catch (Exception $e) {
45
		} catch (Exception $e) {
46
			$this->traiterErreur($e->getMessage());
46
			$this->traiterErreur($e->getMessage());
47
		}
47
		}
48
	}
48
	}
49
 
49
 
50
	protected function chargerMetaDonnees() {
50
	protected function chargerMetaDonnees() {
51
		$contenuSql = $this->recupererContenu(Config::get('chemins.lion1906Meta'));
51
		$contenuSql = $this->recupererContenu(Config::get('chemins.lion1906Meta'));
52
		$this->executerScripSql($contenuSql);
52
		$this->executerScripSql($contenuSql);
53
	}
53
	}
54
 
54
 
55
	private function chargerLion1906() {
55
	private function chargerLion1906() {
56
		$chemin = Config::get('chemins.lion1906');
56
		$chemin = Config::get('chemins.lion1906');
57
		$table = Config::get('tables.lion1906');
57
		$table = Config::get('tables.lion1906');
58
		$requete = "LOAD DATA INFILE '$chemin' ".
58
		$requete = "LOAD DATA INFILE '$chemin' ".
59
					"REPLACE INTO TABLE $table ".
59
					"REPLACE INTO TABLE $table ".
60
					'CHARACTER SET latin1 '.
60
					'CHARACTER SET latin1 '.
61
					'FIELDS '.
61
					'FIELDS '.
62
					"	TERMINATED BY ';' ".
62
					"	TERMINATED BY ';' ".
63
					"	ENCLOSED BY '' ".
63
					"	ENCLOSED BY '' ".
64
					"	ESCAPED BY '\\\' ".
64
					"	ESCAPED BY '\\\' ".
65
					'IGNORE 1 LINES';
65
					'IGNORE 1 LINES';
66
		$this->getBdd()->requeter($requete);
66
		$this->getBdd()->requeter($requete);
67
	}
67
	}
68
 
68
 
69
	private function convertirRadianEnDegre() {
69
	private function convertirRadianEnDegre() {
70
		$table = Config::get('tables.lion1906');
70
		$table = Config::get('tables.lion1906');
71
		$requete = 	'SELECT insee, latitude_radian, longitude_radian '.
71
		$requete = 	'SELECT insee, latitude_radian, longitude_radian '.
72
					"FROM $table ";
72
					"FROM $table ";
73
		$LatLons = $this->getBdd()->recupererTous($requete);
73
		$LatLons = $this->getBdd()->recupererTous($requete);
74
 
74
 
75
		foreach ($LatLons as $LatLon) {
75
		foreach ($LatLons as $LatLon) {
76
			$insee = $LatLon['insee'] ;
76
			$insee = $LatLon['insee'] ;
77
			$latitude_degre = $LatLon['latitude_radian'] * 180 / pi();
77
			$latitude_degre = $LatLon['latitude_radian'] * 180 / pi();
78
			$longitude_degre = $LatLon['longitude_radian'] * 180 / pi();
78
			$longitude_degre = $LatLon['longitude_radian'] * 180 / pi();
79
			$latitude_degre = str_replace(',', '.', $latitude_degre);
79
			$latitude_degre = str_replace(',', '.', $latitude_degre);
80
			$longitude_degre = str_replace(',', '.', $longitude_degre);
80
			$longitude_degre = str_replace(',', '.', $longitude_degre);
81
			$this->formerPointCentre($latitude_degre, $longitude_degre, $insee);
81
			$this->formerPointCentre($latitude_degre, $longitude_degre, $insee);
82
			$this->afficherAvancement('Analyse des communes Lion1906');
82
			$this->afficherAvancement('Analyse des communes Lion1906');
83
		}
83
		}
84
	}
84
	}
85
 
85
 
86
	private function preparerTable() {
86
	private function preparerTable() {
87
		$table = Config::get('tables.lion1906');
87
		$table = Config::get('tables.lion1906');
88
		$requete = 	"ALTER TABLE $table ".
88
		$requete = 	"ALTER TABLE $table ".
89
					'DROP latitude_degre, '.
89
					'DROP latitude_degre, '.
90
					'DROP longitude_degre, '.
90
					'DROP longitude_degre, '.
91
					'DROP centroide, '.
91
					'DROP centroide, '.
92
					'DROP INDEX insee ';
92
					'DROP INDEX insee ';
93
		$this->getBdd()->requeter($requete);
93
		$this->getBdd()->requeter($requete);
94
 
94
 
95
		$requete = 	"ALTER TABLE $table ".
95
		$requete = 	"ALTER TABLE $table ".
96
					'	ADD latitude_degre double NOT NULL , '.
96
					'	ADD latitude_degre double NOT NULL , '.
97
					'	ADD longitude_degre double NOT NULL , '.
97
					'	ADD longitude_degre double NOT NULL , '.
98
					'	ADD centroide point NOT NULL ';
98
					'	ADD centroide point NOT NULL ';
99
		$this->getBdd()->requeter($requete);
99
		$this->getBdd()->requeter($requete);
100
 
100
 
101
		$requete = 	"ALTER TABLE $table ".
101
		$requete = 	"ALTER TABLE $table ".
102
					'ADD INDEX insee (insee, latitude_degre, longitude_degre, centroide) ';
102
					'ADD INDEX insee (insee, latitude_degre, longitude_degre, centroide) ';
103
		$this->getBdd()->requeter($requete);
103
		$this->getBdd()->requeter($requete);
104
	}
104
	}
105
 
105
 
106
	private function formerPointCentre($latitude_degre, $longitude_degre, $insee) {
106
	private function formerPointCentre($latitude_degre, $longitude_degre, $insee) {
107
		$centre = "$latitude_degre $longitude_degre" ;
107
		$centre = "$latitude_degre $longitude_degre" ;
108
		$table = Config::get('tables.lion1906');
108
		$table = Config::get('tables.lion1906');
109
		$requete = "UPDATE $table ".
109
		$requete = "UPDATE $table ".
110
					"SET latitude_degre = '$latitude_degre', longitude_degre = '$longitude_degre', ".
110
					"SET latitude_degre = '$latitude_degre', longitude_degre = '$longitude_degre', ".
111
					"	centroide = POINTFROMTEXT('POINT($centre)') ".
111
					"	centroide = POINTFROMTEXT('POINT($centre)') ".
112
					"WHERE insee = '$insee' ";
112
					"WHERE insee = '$insee' ";
113
		$this->getBdd()->requeter($requete);
113
		$this->getBdd()->requeter($requete);
114
	}
114
	}
115
 
115
 
116
	private function supprimerTous() {
116
	private function supprimerTous() {
117
		$requete = "DROP TABLE lion1906_meta, lion1906_communes_v2008";
117
		$requete = "DROP TABLE IF EXISTS lion1906_meta, lion1906_communes_v2008";
118
		$this->getBdd()->requeter($requete);
118
		$this->getBdd()->requeter($requete);
119
	}
119
	}
120
 
120
 
121
}
121
}
122
?>
122
?>