Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1038 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1038 Rev 1046
Line 1... Line 1...
1
<?php
1
<?php
2
/**
2
/**
-
 
3
 * Permet de mettre à jour les contours à partir d'un fichier de diff.
-
 
4
 *
3
 * Exemple lancement:
5
 * Exemple de lancement du script :
4
 * /opt/lampp/bin/php -d memory_limit=3500M /home/mohcen/web/cartoOSM/scripts/cli.php osm/mise_a_jour -a recupererRelationAMod
6
 * /opt/lampp/bin/php -d memory_limit=3500M cli.php osm -a maj -f fichier_osm_change -e fichier_osm_nouveau
5
 * -f fichier_osm_change -e fichier_osm_nouveau
-
 
6
*/
7
 */
7
class MiseAjour extends Script {
8
class MiseAJour {
-
 
9
	private $conteneur;
-
 
10
	private $bdd;
-
 
11
	private $messages;
-
 
12
	private $mode;
-
 
13
 
8
	private $communes = array();
14
	private $communes = array();
9
	private $relations_communes = array();
15
	private $relations_communes = array();
10
	private $relation_a_chemins = array();
16
	private $relation_a_chemins = array();
11
	private $chemin_a_noeuds = array();
17
	private $chemin_a_noeuds = array();
12
	private $noeuds = array();
18
	private $noeuds = array();
13
	private $pas = 10000;
19
	private $pas = 10000;
14
	private $pas_commune = 1000;
20
	private $pas_commune = 1000;
-
 
21
	private $elementType = '';
Line 15... Line 22...
15
 
22
 
-
 
23
	public function __construct($conteneur) {
-
 
24
		$this->conteneur = $conteneur;
16
	protected $parametres_autorises = array(
25
		$this->bdd = $this->conteneur->getBdd();
-
 
26
		$this->messages = $this->conteneur->getMessages();
-
 
27
		$this->mode = $this->conteneur->getParametre('m');
Line -... Line 28...
-
 
28
	}
-
 
29
 
-
 
30
	/**
-
 
31
	 * Fonction qui parcourt tous les ways les noeuds de chaque relation en prenant en considération l'ordre et
-
 
32
	 * le sens de chaque ways concaténés ensemble (séparés par des virgules). Update du champ polygone de chaque
17
	'-f' => array(true, null, 'Chemin du fichier osm à analyser'));
33
	 * relation dans la table `osm_relations`
18
 
-
 
19
	public function executer() {
-
 
20
		$this->bdd = new Bdd();
34
	 */
21
 
35
	public function executer() {
22
		// Lancement de l'action demandée
36
		// Lancement de l'action demandée
23
		$cmd = $this->getParametre('a');
37
		$cmd = $this->conteneur->getParametre('a');
24
	    switch ($cmd) {
38
		switch ($cmd) {
25
			case 'MAJ' :
39
			case 'maj' :
26
				$this->MettreAjour();
40
				$this->mettreAjour();
27
				break;
41
				break;
-
 
42
			default :
-
 
43
				$msgTpl = "Erreur : la commande '%s' n'est pas prise en compte par la classe %s !";
28
				default :
44
				$msg = sprintf($msgTpl, $cmd, get_class($this));
29
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
-
 
-
 
45
				throw new Exception($msg);
30
		}
46
		}
Line 31... Line 47...
31
    }
47
		print "\n";// Pour ramener à la ligne en fin de script
32
 
48
	}
33
 
49
 
34
	/**
50
	/**
35
	 * Fonction permettant de traiter et d'analyser le fichier de différence et de mettre  à jour la base de données
51
	 * Fonction permettant de traiter et d'analyser le fichier de différence et de mettre  à jour la base de données
36
	 * en tenant compte des trois cas:Suppression, Création ,modification
52
	 * en tenant compte des trois cas:Suppression, Création ,modification
37
	*/
-
 
38
	private function MettreAjour() {
-
 
39
		$lecteur = new XMLReader();
53
	*/
40
		if ($lecteur->open($this->getParametre('f'))) {
54
	private function mettreAjour() {
41
			$dom = new DomDocument();
-
 
42
			while ($lecteur->read()) {
55
		$lecteur = $this->getLecteurXml();
43
				if ($lecteur->nodeType == XMLREADER::ELEMENT) {
56
		while ($lecteur->read()) {
44
					if ($lecteur->localName == 'create') {
57
			if ($lecteur->nodeType == XMLREADER::ELEMENT) {
45
						$creations = $lecteur->expand();
-
 
46
						$this->	analyserCreations($creations);
-
 
47
					}
-
 
48
					if ($lecteur->localName == 'modify') {
58
				$this->elementType = $lecteur->localName;
49
						$modifications = $lecteur->expand();
59
				$this->analyserElementXml($lecteur->localName, $lecteur->expand());
50
						$this->	analyserModifications($modifications);
-
 
51
					}
60
			}
52
					if ($lecteur->localName == 'delete') {
-
 
53
						$suppressions = $lecteur->expand();
-
 
54
						$this->	analyserSuppressions($suppressions);
61
 
55
					}
-
 
56
				}
-
 
57
			}
-
 
58
		} else {
62
			if ($this->mode == 'manuel') {
59
			$e = "Impossible d'ouvrir le fichier osm : %s";
63
				$this->messages->afficherAvancement("Analyse de la ligne du fichier de diff OSM : ", 1);
Line -... Line 64...
-
 
64
			}
-
 
65
		}
-
 
66
	}
-
 
67
 
-
 
68
	private function getLecteurXml() {
-
 
69
		$fichierOsm = $this->conteneur->getParametre('f');
-
 
70
		$lecteur = new XMLReader();
-
 
71
		$ouvertureXmlOk = $lecteur->open($fichierOsm);
60
			$this->traiterErreur($e, array($this->getParametre('f')));
72
		if ($ouvertureXmlOk === false) {
61
		}
73
			$msgTpl = "Impossible d'ouvrir le fichier osm : %s";
62
	}
74
			$msg = sprintf($msgTpl, $this->conteneur->getParametre('f'));
-
 
75
			new Exception($msg);
63
 
76
		}
64
	/**
77
		return $lecteur;
65
	 * Fonction permettant le traitement du cas création concernant les relations, ways et les noeuds.
78
	}
66
	 */
79
 
67
	private function analyserCreations($creations) {
-
 
68
		$relations = $creations->getElementsByTagName('relation');
80
	private function analyserElementXml($noeudDom) {
69
		foreach ($relations as $relation) {
-
 
70
			$this-> analyserRelation($relation);
-
 
71
			if (count($this->relation_a_chemins) > $this->pas) {
81
		$relations = $noeudDom->getElementsByTagName('relation');
72
				$this->insererRelationAChemins();
82
		if ($relations->length > 0) {
73
			}
83
			foreach ($relations as $relation) {
-
 
84
				$this->analyserRelation($relation);
74
			if (count($this->relations_communes) > $this->pas_commune) {
85
				$this->traiterRelations();
-
 
86
			}
75
				$this->insererRelationsCommunes();
87
		}
76
			}
88
 
77
		}
-
 
78
		$ways = $creations->getElementsByTagName('way');
89
		$ways = $creations->getElementsByTagName('way');
79
		foreach ($ways as $way) {
90
		if ($ways->length > 0) {
80
			$this->analyserWay($way);
91
			foreach ($ways as $way) {
-
 
92
				$this->analyserWay($way);
81
			if (count($this->chemin_a_noeuds) > $this->pas) {
93
				$this->traiterCheminANoeuds();
-
 
94
			}
82
				$this->insererCheminANoeuds();
95
		}
83
			}
96
 
84
		}
-
 
85
		$noeuds = $creations->getElementsByTagName('node');
97
		$noeuds = $creations->getElementsByTagName('node');
86
		foreach ($noeuds as $noeud) {
98
		if ($noeuds->length > 0) {
87
			$this->analyserNode($noeud);
99
			foreach ($noeuds as $noeud) {
88
			if (count($this->noeuds) > $this->pas) {
-
 
-
 
100
				$this->analyserNode($noeud);
89
				$this->insererNoeuds();
101
				$this->traiterNoeuds();
90
			}
-
 
91
		}
-
 
92
		$this->insererRelationsCommunes();
102
			}
Line 93... Line -...
93
		$this->insererRelationAChemins();
-
 
94
		$this->insererCheminANoeuds();
-
 
95
		$this->insererNoeuds();
-
 
96
	}
103
		}
97
 
104
 
98
	/**
105
		$this->traiterElementsOrphelins();
-
 
106
	}
99
	 * Fonction permettant le traitement du cas modification concernant les relations, ways et les noeuds.
107
 
-
 
108
	private function traiterRelations() {
100
	 */
109
		if (count($this->relation_a_chemins) > $this->pas) {
101
	private function analyserModifications($modifications) {
110
			switch ($this->elementType) {
102
		$relations = $modifications->getElementsByTagName('relation');
111
				case 'create' :
103
		foreach ($relations as $relation) {
112
					$this->insererRelationAChemins();
104
			$this-> analyserRelation($relation);
113
					break;
-
 
114
				case 'modify' :
105
			if (count($this->relation_a_chemins) > $this->pas) {
115
					$this->modifierRelationAChemins();
106
				$this->modifierRelationAChemins();
116
					break;
107
			}
117
				case 'delete' :
108
			if (count($this->relations_communes) > $this->pas_commune) {
118
					$this->supprimerRelationAChemins();
-
 
119
					break;
109
				$this->modifierRelationsCommunes();
120
			}
-
 
121
		}
-
 
122
		if (count($this->relations_communes) > $this->pas_commune) {
110
			}
123
			switch ($this->elementType) {
-
 
124
				case 'create' :
-
 
125
					$this->insererRelationsCommunes();
111
		}
126
					break;
-
 
127
				case 'modify' :
112
		$ways = $modifications->getElementsByTagName('way');
128
					$this->modifierRelationsCommunes();
113
		foreach ($ways as $way) {
129
					break;
-
 
130
				case 'delete' :
-
 
131
					$this->supprimerRelationsCommunes();
-
 
132
					break;
114
			$this->analyserWay($way);
133
			}
115
			if (count($this->chemin_a_noeuds) > $this->pas) {
134
		}
-
 
135
	}
116
				$this->modifierCheminANoeuds();
136
 
-
 
137
	private function traiterChemins() {
-
 
138
		if (count($this->chemin_a_noeuds) > $this->pas) {
117
			}
139
			switch ($this->elementType) {
-
 
140
				case 'create' :
-
 
141
					$this->insererCheminANoeuds();
118
		}
142
					break;
-
 
143
				case 'modify' :
119
		$noeuds = $modifications->getElementsByTagName('node');
144
					$this->modifierCheminANoeuds();
120
		foreach ($noeuds as $noeud) {
145
					break;
121
			$this->analyserNode($noeud);
-
 
122
			if (count($this->noeuds) > $this->pas) {
-
 
123
				$this->modifierNoeuds();
-
 
124
			}
-
 
125
		}
146
				case 'delete' :
Line 126... Line -...
126
		$this->modifierRelationsCommunes();
-
 
127
		$this->modifierRelationAChemins();
147
					$this->supprimerCheminANoeuds();
128
		$this->modifierCheminANoeuds();
-
 
129
		$this->modifierNoeuds();
148
					break;
130
	}
149
			}
131
 
150
		}
132
	/**
151
	}
-
 
152
 
133
	 * Fonction permettant le traitement du cas suppression concernant les relations, ways et les noeuds.
153
	private function traiterNoeuds() {
134
	 */
154
		if (count($this->noeuds) > $this->pas) {
135
	private function analyserSuppressions($suppressions) {
155
			switch ($this->elementType) {
136
		$relations = $suppressions->getElementsByTagName('relation');
156
				case 'create' :
137
		foreach ($relations as $relation) {
157
					$this->insererNoeuds();
-
 
158
					break;
138
			$this-> analyserRelation($relation);
159
				case 'modify' :
139
			if (count($this->relation_a_chemins) > $this->pas) {
160
					$this->modifierNoeuds();
-
 
161
					break;
-
 
162
				case 'delete' :
140
				$this->supprimerRelationAChemins();
163
					$this->supprimerNoeuds();
141
			}
164
					break;
-
 
165
			}
-
 
166
		}
-
 
167
	}
-
 
168
 
142
			if (count($this->relations_communes) > $this->pas_commune) {
169
	private function traiterElementsOrphelins() {
-
 
170
		switch ($this->elementType) {
-
 
171
			case 'create' :
-
 
172
				$this->insererRelationsCommunes();
143
				$this->supprimerRelationsCommunes();
173
				$this->insererRelationAChemins();
-
 
174
				$this->insererCheminANoeuds();
-
 
175
				$this->insererNoeuds();
-
 
176
				break;
-
 
177
			case 'modify' :
-
 
178
				$this->modifierRelationsCommunes();
-
 
179
				$this->modifierRelationAChemins();
144
			}
180
				$this->modifierCheminANoeuds();
145
		}
-
 
146
		$ways = $suppressions->getElementsByTagName('way');
-
 
147
		foreach ($ways as $way) {
-
 
148
			$this->analyserWay($way);
-
 
149
			if (count($this->chemin_a_noeuds) > $this->pas) {
-
 
150
				$this->supprimerCheminANoeuds();
-
 
151
			}
181
				$this->modifierNoeuds();
152
		}
182
				break;
153
		$noeuds = $suppressions->getElementsByTagName('node');
183
			case 'delete' :
154
		foreach ($noeuds as $noeud) {
-
 
155
			$this->analyserNode($noeud);
-
 
156
			if (count($this->noeuds) > $this->pas) {
-
 
157
				$this->supprimerNoeuds();
-
 
158
			}
184
				$this->supprimerRelationsCommunes();
Line 159... Line -...
159
		}
-
 
160
		$this->supprimerRelationsCommunes();
185
				$this->supprimerRelationAChemins();
161
		$this->supprimerRelationAChemins();
186
				$this->supprimerCheminANoeuds();
162
		$this->supprimerCheminANoeuds();
187
				$this->supprimerNoeuds();
163
		$this->supprimerNoeuds();
188
				break;
164
	}
189
		}
165
 
190
	}
166
 
191
 
167
	/**
192
	/**
168
	 * Récupère l'id commune, nom commune et le code INSEE et remplie la table `osm_relations`
193
	 * Récupère l'id commune, nom commune et le code INSEE et remplie la table `osm_relations`
169
	 */
194
	 */
170
	private function analyserRelation($relation) {
195
	private function analyserRelation($relation) {
171
		$relation_id = $this->proteger($relation->getAttribute('id'));
196
		$relation_id = $relation->getAttribute('id');
172
		$chemins = $relation->getElementsByTagName('member');
197
		$chemins = $relation->getElementsByTagName('member');
-
 
198
		foreach ($chemins as $chemin) {
-
 
199
			if ($chemin->getAttribute('type') == 'way') { //écarter le noeud centrale
-
 
200
				$chemin_id = $chemin->getAttribute('ref');
-
 
201
				$role = $chemin->getAttribute('role');//role: null, inner, outer, exclave et enclave.
-
 
202
				$this->relation_a_chemins[] = array($relation_id, $chemin_id, $role);
-
 
203
			}
-
 
204
		}
-
 
205
 
173
		foreach ($chemins as $chemin) {
206
		$tags = $relation->getElementsByTagName('tag');
174
			if ($chemin->getAttribute('type') == 'way') { //écarter le noeud centrale
207
		if ($tags->length > 0) {
175
				$chemin_id = $this->proteger($chemin->getAttribute('ref'));
-
 
176
				$role = $this->proteger($chemin->getAttribute('role'));//role: null, inner, outer, exclave et enclave.
208
			$this->analyserTags($relation_id, $tags);
177
				$this->relation_a_chemins[] = array($relation_id, $chemin_id, $role);
209
		}
178
			}
210
	}
179
		}
211
 
180
		$commune_nom = null;
212
	private function analyserTags($relation_id, $tags) {
181
		$commune_insee = null;
213
		$commune_nom = null;
182
		$tags = $relation->getElementsByTagName('tag');
214
		$commune_insee = null;
183
		foreach ($tags as $tag) {
215
		foreach ($tags as $tag) {
184
			$tag_cle = $tag->getAttribute('k');
216
			$tag_cle = $tag->getAttribute('k');
185
			$tag_val = $tag->getAttribute('v');
217
			$tag_val = $tag->getAttribute('v');
186
			switch ($tag_cle) {
218
			switch ($tag_cle) {
187
				case 'name' :
219
				case 'name' :
188
					$commune_nom = $this->proteger($tag_val);
220
					$commune_nom = $tag_val;
189
					break;
221
					break;
Line 207... Line 239...
207
 
239
 
208
	/**
240
	/**
209
	 * Récupère l'id_way et tous les id_node de chaque way et remplie la table `osm_chemin_a_noeuds`
241
	 * Récupère l'id_way et tous les id_node de chaque way et remplie la table `osm_chemin_a_noeuds`
210
	 */
242
	 */
211
	private function analyserWay($way) {
243
	private function analyserWay($way) {
212
		$chemin_id = $this->proteger($way->getAttribute('id'));
-
 
213
		$ordre = 0;
244
		$chemin_id = $way->getAttribute('id');
214
		$noeuds = $way->getElementsByTagName('nd');
245
		$noeuds = $way->getElementsByTagName('nd');
215
		$chemin_a_noeuds = array();
246
		$ordre = 0;
216
		foreach ($noeuds as $noeud) {
247
		foreach ($noeuds as $noeud) {
217
			$noeud_id = $this->proteger($noeud->getAttribute('ref'));
-
 
218
			$ordre++;
248
			$noeud_id = $noeud->getAttribute('ref');
219
	    	$this->chemin_a_noeuds[] = array($chemin_id, $noeud_id, $ordre);
249
			$this->chemin_a_noeuds[] = array($chemin_id, $noeud_id, ++$ordre);
220
		}
250
		}
Line 221... Line 251...
221
	}
251
	}
222
 
252
 
223
	/**
253
	/**
224
	 * Fonction qui récupère tous les l'id_node et les valeurs(Lat/Lon) correspondantes et remplie la table `osm_noeuds`
254
	 * Fonction qui récupère tous les l'id_node et les valeurs(Lat/Lon) correspondantes et remplie la table `osm_noeuds`
225
	 */
255
	 */
226
	private function analyserNode($node) {
256
	private function analyserNode($node) {
227
		$noeud_id = $this->proteger($node->getAttribute('id'));
257
		$this->noeuds[] = array(
228
		$lat = $this->proteger($node->getAttribute('lat'));
258
			$node->getAttribute('id'),
-
 
259
			$node->getAttribute('lat'),
229
		$lon = $this->proteger($node->getAttribute('lon'));
260
			$node->getAttribute('lon')
Line 230... Line 261...
230
		$this->noeuds[] = array($noeud_id, $lat, $lon);
261
		);
231
	}
262
	}
232
 
263
 
233
	//Insertion des relations
264
	//Insertion des relations
-
 
265
	private function insererRelationsCommunes() {
234
	private function insererRelationsCommunes() {
266
		$requete = 'INSERT INTO osm_relations (id_relation, nom, code_insee) '.
235
		$requete =	'INSERT INTO osm_relations (id_relation, nom, code_insee) '.
267
			'VALUES '.$this->creerValuesMultiple($this->relations_communes).
236
					'VALUES '.$this->creerValuesMultiple($this->relations_communes);
268
			' -- '.__FILE__.' : '.__LINE__;
Line 237... Line 269...
237
		$this->inserer($requete);
269
		$this->bdd->requeter($requete);
238
		$this->relations_communes = array();
270
		$this->relations_communes = array();
239
	}
271
	}
240
 
272
 
-
 
273
	//Insertion des relations à chemins
241
	//Insertion des relations à chemins
274
	private function insererRelationAChemins() {
242
	private function insererRelationAChemins() {
275
		$requete = 'INSERT INTO osm_relation_a_chemins (id_relation, id_chemin, role) '.
243
		$requete =	'INSERT INTO osm_relation_a_chemins (id_relation, id_chemin, role) '.
276
			'VALUES '.$this->creerValuesMultiple($this->relation_a_chemins).
Line 244... Line 277...
244
					'VALUES '.$this->creerValuesMultiple($this->relation_a_chemins);
277
			' -- '.__FILE__.' : '.__LINE__;
245
		$this->inserer($requete);
278
		$this->bdd->requeter($requete);
246
		$this->relation_a_chemins = array();
279
		$this->relation_a_chemins = array();
247
	}
280
	}
-
 
281
 
248
 
282
	//Insertion des chemins à noeuds
249
	//Insertion des chemins à noeuds
283
	private function insererCheminANoeuds() {
250
	private function insererCheminANoeuds() {
284
		$requete = 'INSERT INTO osm_chemin_a_noeuds (id_chemin, id_noeud, ordre) '.
Line 251... Line 285...
251
		$requete = 	'INSERT INTO osm_chemin_a_noeuds (id_chemin, id_noeud, ordre) '.
285
			'VALUES '.$this->creerValuesMultiple($this->chemin_a_noeuds).
252
					'VALUES '.$this->creerValuesMultiple($this->chemin_a_noeuds);
286
			' -- '.__FILE__.' : '.__LINE__;
253
		$this->inserer($requete);
287
		$this->bdd->requeter($requete);
254
		$this->chemin_a_noeuds = array();
288
		$this->chemin_a_noeuds = array();
-
 
289
	}
255
	}
290
 
256
 
291
	//Insertion des noeuds
257
	//Insertion des noeuds
292
	private function insererNoeuds() {
Line 258... Line 293...
258
	private function insererNoeuds() {
293
		$requete = 'INSERT INTO osm_noeuds (id_noeud, lat, `long`) '.
259
		$requete = 'INSERT INTO osm_noeuds (id_noeud, lat, `long`) '.
294
			'VALUES '.$this->creerValuesMultiple($this->noeuds).
260
	    		   'VALUES '.$this->creerValuesMultiple($this->noeuds);
295
			' -- '.__FILE__.' : '.__LINE__;
261
		$this->inserer($requete);
296
		$this->bdd->requeter($requete);
262
		$this->noeuds = array();
297
		$this->noeuds = array();
263
	}
298
	}
264
 
299
 
-
 
300
	//Update des relations
265
	//Update des relations
301
	private function modifierRelationsCommunes() {
266
	private function modifierRelationsCommunes() {
302
		foreach ($this->relations_communes as $donnee) {
267
		$donnees = $this->relations_communes;
303
			$infosP = $this->bdd->proteger($donnee);
268
		foreach ($donnees as $donnee) {
304
			$requete = 'UPDATE osm_relations '.
Line 269... Line 305...
269
		$requete = 'UPDATE osm_relations '.
305
				"SET id_relation = $infosP[0], nom = $infosP[1], code_insee = $infosP[2] ".
270
					"SET id_relation = $donnee[0], nom = $donnee[1], code_insee = $donnee[2] ".
306
				"WHERE id_relation = $infosP[0] ".
271
					"WHERE id_relation = $donnee[0]";
307
				' -- '.__FILE__.' : '.__LINE__;
272
			$this->inserer($requete);
308
			$this->bdd->requeter($requete);
273
		}
309
		}
274
		$this->relations_communes = array();
-
 
275
	}
310
		$this->relations_communes = array();
276
 
311
	}
277
	/*
-
 
278
	*Update des relations à chemins en supprimant l'ancienne relation et tous ses chemins
-
 
279
	*de la table osm_relation_a_chemins et insérer la nouvelle
-
 
280
	*/
-
 
281
	private function modifierRelationAChemins() {
-
 
282
		$relations_a_chemins_a_supp = array();
312
 
283
		$donnees = $this->relation_a_chemins;
-
 
284
		foreach ($donnees as $donnee) {
313
	/*
285
			$relations_a_chemins_a_supp[] = $donnee[0];
314
	*Update des relations à chemins en supprimant l'ancienne relation et tous ses chemins
-
 
315
	*de la table osm_relation_a_chemins et insérer la nouvelle
286
		}
316
	*/
287
		$values_chaine = '('.implode(',',array_unique($relations_a_chemins_a_supp)).')';
317
	private function modifierRelationAChemins() {
288
		$requete = 'DELETE FROM osm_relation_a_chemins '.
318
		$this->supprimerRelationAChemins();
289
					"WHERE id_relation IN $values_chaine";
319
		foreach ($this->relation_a_chemins as $donnee) {
Line 290... Line 320...
290
		$this->inserer($requete);
320
			$infosP = $this->bdd->proteger($donnee);
291
		foreach ($donnees as $donnee) {
321
			$requete = 'INSERT INTO osm_relation_a_chemins (id_relation, id_chemin, role) '.
292
			$requete = 'INSERT INTO osm_relation_a_chemins (id_relation, id_chemin, role) '.
322
				"VALUES ($infosP[0], $infosP[1], $infosP[2]) ".
293
						"VALUES ($donnee[0], $donnee[1], $donnee[2]);";
323
				' -- '.__FILE__.' : '.__LINE__;
294
			$this->inserer($requete);
324
			$this->bdd->requeter($requete);
295
		}
-
 
296
		$this->relation_a_chemins = array();
325
		}
297
	}
326
		$this->relation_a_chemins = array();
298
 
-
 
299
	/*
-
 
300
	*Update des chemins à noeuds en supprimant l'ancien chemin et tous ses noeuds
-
 
301
	*de la table osm_chemins_a_noeuds et insérer le nouveau
-
 
302
	*/
-
 
303
	private function modifierCheminANoeuds() {
327
	}
304
		$chemin_a_noeuds_a_supp = array();
-
 
305
		$donnees = $this->chemin_a_noeuds;
328
 
306
		foreach ($donnees as $donnee) {
329
	/*
-
 
330
	*Update des chemins à noeuds en supprimant l'ancien chemin et tous ses noeuds
307
			$chemin_a_noeuds_a_supp[] = $donnee[0];
331
	*de la table osm_chemins_a_noeuds et insérer le nouveau
308
		}
332
	*/
309
		$values_chaine = '('.implode(',',array_unique($chemin_a_noeuds_a_supp)).')';
333
	private function modifierCheminANoeuds() {
310
		$requete = 'DELETE FROM osm_chemin_a_noeuds '.
334
		$this->supprimerCheminANoeuds();
Line 311... Line -...
311
					"WHERE id_chemin IN $values_chaine";
-
 
312
		$this->inserer($requete);
335
		foreach ($this->chemin_a_noeuds as $donnee) {
313
		foreach ($donnees as $donnee) {
336
			$infosP = $this->bdd->proteger($donnee);
314
			$requete = 'INSERT INTO osm_chemin_a_noeuds (id_chemin, id_noeud, ordre) '.
337
			$requete = 'INSERT INTO osm_chemin_a_noeuds (id_chemin, id_noeud, ordre) '.
315
						"VALUES ($donnee[0], $donnee[1], $donnee[2]);";
338
				"VALUES ($infosP[0], $infosP[1], $infosP[2]) ".
316
			$this->inserer($requete);
339
				' -- '.__FILE__.' : '.__LINE__;
317
		}
340
			$this->bdd->requeter($requete);
318
		$this->chemin_a_noeuds = array();
341
		}
-
 
342
		$this->chemin_a_noeuds = array();
319
	}
343
	}
320
 
344
 
321
 
345
	//Update des noeuds
322
	//Update des noeuds
346
	private function modifierNoeuds() {
Line 323... Line -...
323
	private function modifierNoeuds() {
-
 
324
		$donnees = $this->noeuds;
347
		foreach ($this->noeuds as $donnee) {
325
		foreach ($donnees as $donnee) {
348
			$infosP = $this->bdd->proteger($donnee);
326
			$requete = 'UPDATE osm_noeuds '.
349
			$requete = 'UPDATE osm_noeuds '.
327
						"SET id_noeud = $donnee[0], lat = $donnee[1], `long` = $donnee[2] ".
-
 
328
						"WHERE id_noeud = $donnee[0]";
-
 
329
			$this->inserer($requete);
-
 
330
		}
-
 
331
		$this->noeuds = array();
-
 
332
	}
350
				"SET id_noeud = $infosP[0], lat = $infosP[1], `long` = $infosP[2] ".
-
 
351
				"WHERE id_noeud = $infosP[0] ".
-
 
352
				' -- '.__FILE__.' : '.__LINE__;
-
 
353
			$this->bdd->requeter($requete);
-
 
354
		}
333
 
355
		$this->noeuds = array();
Line 334... Line 356...
334
 
356
	}
335
	//Suppressions des relations
357
 
336
	private function supprimerRelationsCommunes() {
-
 
337
		$donnees = $this->relations_communes;
-
 
338
		foreach ($donnees as $donnee) {
358
	//Suppressions des relations
339
			$requete = 'DELETE FROM osm_relations '.
-
 
340
						"WHERE id_relation = $donnee[0]";
-
 
341
			$this->inserer($requete);
-
 
342
		}
-
 
343
		$this->relations_communes = array();
359
	private function supprimerRelationsCommunes() {
-
 
360
		$idsIn = $this->getIds($this->relations_communes);
-
 
361
		$this->relations_communes = array();
-
 
362
		$requete = 'DELETE FROM osm_relations '.
-
 
363
			"WHERE id_relation IN ($idsIn) ".
344
	}
364
			' -- '.__FILE__.' : '.__LINE__;
Line 345... Line 365...
345
 
365
		$this->bdd->requeter($requete);
346
	//Suppressions des relations à chemins
366
	}
347
	private function supprimerRelationAChemins() {
367
 
348
		$donnees = $this->relations_communes;
-
 
349
		foreach ($donnees as $donnee) {
-
 
350
			$donnees = $this->relation_a_chemins;
-
 
351
			$requete = 'DELETE FROM osm_relation_a_chemins '.
-
 
352
						"WHERE id_relation = $donnee[0]";
-
 
353
			$this->inserer($requete);
-
 
354
		}
368
	//Suppressions des relations à chemins
-
 
369
	private function supprimerRelationAChemins() {
-
 
370
		$idsIn = $this->getIds($this->relation_a_chemins);
-
 
371
		$this->relation_a_chemins = array();
-
 
372
		$requete = 'DELETE FROM osm_relation_a_chemins '.
355
		$this->relation_a_chemins = array();
373
			"WHERE id_relation IN ($idsIn) ".
Line 356... Line 374...
356
	}
374
			' -- '.__FILE__.' : '.__LINE__;
357
 
375
		$this->bdd->requeter($requete);
358
	//Suppressions des chemins à noeuds
376
	}
359
	private function supprimerCheminANoeuds() {
-
 
360
		$donnees = $this->chemin_a_noeuds;
-
 
361
		foreach ($donnees as $donnee) {
-
 
362
			$donnees = $this->relation_a_chemins;
-
 
363
			$requete = 'DELETE FROM osm_chemin_a_noeuds '.
-
 
364
						"WHERE id_chemin = $donnee[0]";
377
 
365
			$this->inserer($requete);
-
 
366
		}
-
 
367
		$this->chemin_a_noeuds = array();
378
	//Suppressions des chemins à noeuds
-
 
379
	private function supprimerCheminANoeuds() {
-
 
380
		$idsIn = $this->getIds($this->chemin_a_noeuds);
368
	}
381
		$this->chemin_a_noeuds = array();
369
 
382
		$requete = 'DELETE FROM osm_chemin_a_noeuds '.
Line 370... Line 383...
370
	//Suppressions des chemins à noeuds
383
			"WHERE id_chemin IN ($idsIn) ".
-
 
384
			' -- '.__FILE__.' : '.__LINE__;
-
 
385
		$this->bdd->requeter($requete);
371
	private function supprimerNoeuds() {
386
	}
-
 
387
 
-
 
388
	//Suppressions des chemins à noeuds
-
 
389
	private function supprimerNoeuds() {
-
 
390
		$idsIn = $this->getIds($this->noeuds);
372
		$donnees = $this->noeuds;
391
		$this->noeuds = array();
Line 373... Line 392...
373
		foreach ($donnees as $donnee) {
392
		$requete = 'DELETE FROM osm_noeuds '.
374
			$requete = 'DELETE FROM osm_noeuds '.
393
			"WHERE id_noeud IN ($idsIn) ".
375
						"WHERE id_noeud = $donnee[0]";
394
			' -- '.__FILE__.' : '.__LINE__;
-
 
395
		$this->bdd->requeter($requete);
376
			$this->inserer($requete);
396
	}
377
		}
397
 
378
		$this->noeuds = array();
398
	private function getIds(&$tableau) {
379
	}
399
		$ids = array();
380
 
400
		foreach ($tableau as $info) {
381
	private function inserer($requete) {
401
			$ids[] = $this->bdd->proteger($info[0]);
382
		$this->bdd->requeter($requete);
-
 
383
	}
402
		}