Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 391 → Rev 392

/trunk/scripts/modules/osm/MiseAJour.php
1,8 → 1,8
<?php
/* Exemple lancement:
/opt/lampp/bin/php -d memory_limit=3500M /home/mohcen/web/cartoOSM/scripts/cli.php mise_a_jour -a recupererRelationAMod
* -f fichier_osm_change -e fichier_osm_nouveau
*/
/**
* Exemple lancement:
* /opt/lampp/bin/php -d memory_limit=3500M cli.php osm/mise_a_jour -a MAJ -f fichier_osm_a_analyser
*/
class MiseAjour extends Script {
private $communes = array();
private $relations_communes = array();
11,7 → 11,7
private $noeuds = array();
private $pas = 10000;
private $pas_commune = 1000;
 
protected $parametres_autorises = array(
'-f' => array(true, null, 'Chemin du fichier osm à analyser'));
 
28,8 → 28,8
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
}
}
 
 
/**
* Fonction permettant de traiter et d'analyser le fichier de différence et de mettre à jour la base de données
* en tenant compte des trois cas:Suppression, Création ,modification
43,15 → 43,15
if ($lecteur->localName == 'create') {
$creations = $lecteur->expand();
$this-> analyserCreations($creations);
}
}
if ($lecteur->localName == 'modify') {
$modifications = $lecteur->expand();
$this-> analyserModifications($modifications);
}
}
if ($lecteur->localName == 'delete') {
$suppressions = $lecteur->expand();
$this-> analyserSuppressions($suppressions);
}
}
}
}
} else {
59,7 → 59,7
$this->traiterErreur($e, array($this->getParametre('f')));
}
}
 
/**
* Fonction permettant le traitement du cas création concernant les relations, ways et les noeuds.
*/
93,7 → 93,7
$this->insererCheminANoeuds();
$this->insererNoeuds();
}
 
/**
* Fonction permettant le traitement du cas modification concernant les relations, ways et les noeuds.
*/
127,7 → 127,7
$this->modifierCheminANoeuds();
$this->modifierNoeuds();
}
 
/**
* Fonction permettant le traitement du cas suppression concernant les relations, ways et les noeuds.
*/
161,11 → 161,11
$this->supprimerCheminANoeuds();
$this->supprimerNoeuds();
}
 
 
/**
* Récupère l'id commune, nom commune et le code INSEE et remplie la table `osm_relations`
*/
*/
private function analyserRelation($relation) {
$relation_id = $this->proteger($relation->getAttribute('id'));
$chemins = $relation->getElementsByTagName('member');
173,7 → 173,7
if ($chemin->getAttribute('type') == 'way') { //écarter le noeud centrale
$chemin_id = $this->proteger($chemin->getAttribute('ref'));
$role = $this->proteger($chemin->getAttribute('role'));//role: null, inner, outer, exclave et enclave.
$this->relation_a_chemins[] = array($relation_id, $chemin_id, $role);
$this->relation_a_chemins[] = array($relation_id, $chemin_id, $role);
}
}
$commune_nom = null;
185,7 → 185,7
switch ($tag_cle) {
case 'name' :
$commune_nom = $this->proteger($tag_val);
break;
break;
case 'ref:INSEE' :
$commune_insee = $this->proteger($tag_val);
break;
201,12 → 201,12
}
break;
}
}
}
}
 
/**
* Récupère l'id_way et tous les id_node de chaque way et remplie la table `osm_chemin_a_noeuds`
*/
*/
private function analyserWay($way) {
$chemin_id = $this->proteger($way->getAttribute('id'));
$ordre = 0;
218,10 → 218,10
$this->chemin_a_noeuds[] = array($chemin_id, $noeud_id, $ordre);
}
}
/**
 
/**
* Fonction qui récupère tous les l'id_node et les valeurs(Lat/Lon) correspondantes et remplie la table `osm_noeuds`
*/
*/
private function analyserNode($node) {
$noeud_id = $this->proteger($node->getAttribute('id'));
$lat = $this->proteger($node->getAttribute('lat'));
228,8 → 228,8
$lon = $this->proteger($node->getAttribute('lon'));
$this->noeuds[] = array($noeud_id, $lat, $lon);
}
//Insertion des relations
 
//Insertion des relations
private function insererRelationsCommunes() {
$requete = 'INSERT INTO osm_relations (id_relation, nom, code_insee) '.
'VALUES '.$this->creerValuesMultiple($this->relations_communes);
237,15 → 237,15
$this->relations_communes = array();
}
 
//Insertion des relations à chemins
//Insertion des relations à chemins
private function insererRelationAChemins() {
$requete = 'INSERT INTO osm_relation_a_chemins (id_relation, id_chemin, role) '.
'VALUES '.$this->creerValuesMultiple($this->relation_a_chemins);
$this->inserer($requete);
$this->relation_a_chemins = array();
}
}
 
//Insertion des chemins à noeuds
//Insertion des chemins à noeuds
private function insererCheminANoeuds() {
$requete = 'INSERT INTO osm_chemin_a_noeuds (id_chemin, id_noeud, ordre) '.
'VALUES '.$this->creerValuesMultiple($this->chemin_a_noeuds);
252,8 → 252,8
$this->inserer($requete);
$this->chemin_a_noeuds = array();
}
//Insertion des noeuds
 
//Insertion des noeuds
private function insererNoeuds() {
$requete = 'INSERT INTO osm_noeuds (id_noeud, lat, `long`) '.
'VALUES '.$this->creerValuesMultiple($this->noeuds);
260,22 → 260,22
$this->inserer($requete);
$this->noeuds = array();
}
//Update des relations
 
//Update des relations
private function modifierRelationsCommunes() {
$donnees = $this->relations_communes;
foreach ($donnees as $donnee) {
$requete = 'UPDATE osm_relations '.
"SET id_relation = $donnee[0], nom = $donnee[1], code_insee = $donnee[2] ".
$requete = 'UPDATE osm_relations '.
"SET id_relation = $donnee[0], nom = $donnee[1], code_insee = $donnee[2] ".
"WHERE id_relation = $donnee[0]";
$this->inserer($requete);
}
$this->relations_communes = array();
}
 
/*
*Update des relations à chemins en supprimant l'ancienne relation et tous ses chemins
*de la table osm_relation_a_chemins et insérer la nouvelle
*Update des relations à chemins en supprimant l'ancienne relation et tous ses chemins
*de la table osm_relation_a_chemins et insérer la nouvelle
*/
private function modifierRelationAChemins() {
$relations_a_chemins_a_supp = array();
286,7 → 286,7
$values_chaine = '('.implode(',',array_unique($relations_a_chemins_a_supp)).')';
$requete = 'DELETE FROM osm_relation_a_chemins '.
"WHERE id_relation IN $values_chaine";
$this->inserer($requete);
$this->inserer($requete);
foreach ($donnees as $donnee) {
$requete = 'INSERT INTO osm_relation_a_chemins (id_relation, id_chemin, role) '.
"VALUES ($donnee[0], $donnee[1], $donnee[2]);";
293,11 → 293,11
$this->inserer($requete);
}
$this->relation_a_chemins = array();
}
}
 
/*
*Update des chemins à noeuds en supprimant l'ancien chemin et tous ses noeuds
*de la table osm_chemins_a_noeuds et insérer le nouveau
*Update des chemins à noeuds en supprimant l'ancien chemin et tous ses noeuds
*de la table osm_chemins_a_noeuds et insérer le nouveau
*/
private function modifierCheminANoeuds() {
$chemin_a_noeuds_a_supp = array();
308,7 → 308,7
$values_chaine = '('.implode(',',array_unique($chemin_a_noeuds_a_supp)).')';
$requete = 'DELETE FROM osm_chemin_a_noeuds '.
"WHERE id_chemin IN $values_chaine";
$this->inserer($requete);
$this->inserer($requete);
foreach ($donnees as $donnee) {
$requete = 'INSERT INTO osm_chemin_a_noeuds (id_chemin, id_noeud, ordre) '.
"VALUES ($donnee[0], $donnee[1], $donnee[2]);";
316,75 → 316,75
}
$this->chemin_a_noeuds = array();
}
//Update des noeuds
 
 
//Update des noeuds
private function modifierNoeuds() {
$donnees = $this->noeuds;
foreach ($donnees as $donnee) {
$requete = 'UPDATE osm_noeuds '.
"SET id_noeud = $donnee[0], lat = $donnee[1], `long` = $donnee[2] ".
$requete = 'UPDATE osm_noeuds '.
"SET id_noeud = $donnee[0], lat = $donnee[1], `long` = $donnee[2] ".
"WHERE id_noeud = $donnee[0]";
$this->inserer($requete);
}
$this->noeuds = array();
}
//Suppressions des relations
 
 
//Suppressions des relations
private function supprimerRelationsCommunes() {
$donnees = $this->relations_communes;
foreach ($donnees as $donnee) {
$requete = 'DELETE FROM osm_relations '.
$requete = 'DELETE FROM osm_relations '.
"WHERE id_relation = $donnee[0]";
$this->inserer($requete);
}
$this->relations_communes = array();
}
//Suppressions des relations à chemins
 
//Suppressions des relations à chemins
private function supprimerRelationAChemins() {
$donnees = $this->relations_communes;
foreach ($donnees as $donnee) {
$donnees = $this->relation_a_chemins;
$requete = 'DELETE FROM osm_relation_a_chemins '.
$requete = 'DELETE FROM osm_relation_a_chemins '.
"WHERE id_relation = $donnee[0]";
$this->inserer($requete);
}
$this->relation_a_chemins = array();
}
//Suppressions des chemins à noeuds
}
 
//Suppressions des chemins à noeuds
private function supprimerCheminANoeuds() {
$donnees = $this->chemin_a_noeuds;
foreach ($donnees as $donnee) {
$donnees = $this->relation_a_chemins;
$requete = 'DELETE FROM osm_chemin_a_noeuds '.
$requete = 'DELETE FROM osm_chemin_a_noeuds '.
"WHERE id_chemin = $donnee[0]";
$this->inserer($requete);
}
$this->chemin_a_noeuds = array();
}
//Suppressions des chemins à noeuds
 
//Suppressions des chemins à noeuds
private function supprimerNoeuds() {
$donnees = $this->noeuds;
foreach ($donnees as $donnee) {
$requete = 'DELETE FROM osm_noeuds '.
$requete = 'DELETE FROM osm_noeuds '.
"WHERE id_noeud = $donnee[0]";
$this->inserer($requete);
}
$this->noeuds = array();
}
 
private function inserer($requete) {
$this->bdd->requeter($requete);
}
 
private function proteger($chaine) {
return $this->bdd->proteger($chaine);
}
 
private function creerValuesMultiple($donnees) {
$values = array();
foreach ($donnees as $donnee) {
393,5 → 393,5
$values_chaine = '('.implode('),(', $values).')';
return $values_chaine;
}
}
}
?>