Rev 1063 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
/**
* Création de la table osm_communes.
* /opt/lampp/bin/php cli.php osm -a communes -m manuel
*
*/
class ZonesAdmin {
private $conteneur;
private $bdd;
private $messages;
private $mode;
private $bddOsmNom;
public function __construct($conteneur) {
$this->conteneur = $conteneur;
$this->bdd = $this->conteneur->getBdd();
$this->bddOsmNom = $this->conteneur->getParametre('bdd_osm_nom');
$this->messages = $this->conteneur->getMessages();
$this->mode = $this->conteneur->getParametre('m');
}
public function executer() {
// Lancement de l'action demandée
$cmd = $this->conteneur->getParametre('a');
switch ($cmd) {
case 'za' :
$this->supprimerTableOsmZonesAdmin();
$this->conteneur->getEfloreCommun()->chargerStructureSql();
$this->creerTableOsmZonesAdmin();
$this->corrigerTableOsmZonesAdmin();
$this->mettreAJourIdZoneGeo();
break;
case 'zaCreer' :
$this->creerTableOsmZonesAdmin();
break;
case 'zaCorriger' :
$this->corrigerTableOsmZonesAdmin();
break;
case 'zaMajIdZG' :
$this->mettreAJourIdZoneGeo();
break;
case 'zaSupprimer' :
$this->supprimerTableOsmZonesAdmin();
break;
default :
$this->messages->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
}
}
private function supprimerTableOsmZonesAdmin() {
$requete = 'DROP TABLE IF EXISTS osm_zones_admin '.
' -- '.__FILE__.' : '.__LINE__;
$this->bdd->requeter($requete);
}
private function creerTableOsmZonesAdmin() {
$requete = 'INSERT INTO osm_zones_admin '.
"SELECT if(ref_insee != '' AND admin_level = 8, CONCAT('INSEE-C:',ref_insee), ".
"if(ref_insee != '' AND admin_level = 6, CONCAT('INSEE-D:',ref_insee), ".
"if(ref_insee != '' AND admin_level = 4, CONCAT('INSEE-R:',ref_insee), ".
"if(iso3166_2 != '', CONCAT('ISO-3166-2:',iso3166_2), ".
"if(iso3166_1 != '', CONCAT('ISO-3166-1:',iso3166_1), ".
"CONCAT('OSM-ID:',osm_id)))))), ".
'osm_id, osm_version, osm_timestamp, '.
"if(name_fr != '', name_fr, name), ".
'shape, shape_centroid, Y(shape_centroid), X(shape_centroid), zone, '.
'admin_level, iso3166_1, iso3166_2, ref_insee, ref_nuts, '.
'name, name_fr, name_en, name_es, wikipedia '.
"FROM {$this->bddOsmNom}.multipolygons_ref ".
' -- '.__FILE__.' : '.__LINE__;
$this->bdd->requeter($requete);
}
private function corrigerTableOsmZonesAdmin() {
$requete = 'SELECT osm_id, other_tags '.
"FROM {$this->bddOsmNom}.multipolygons_ref ".
"WHERE iso3166_2 IS NULL AND other_tags LIKE '%\"iso3166-2\"%' ".
' -- '.__FILE__.' : '.__LINE__;
$resultat = $this->bdd->recupererTous($requete);
if ($resultat) {
foreach ($resultat as $infos) {
$tags = $this->getTags($infos['other_tags']);
$iso_3166_2 = $this->bdd->proteger($tags['iso3166-2']);
$osm_id = $this->bdd->proteger($infos['osm_id']);
$requete = 'UPDATE osm_zones_admin '.
"SET code_iso_3166_2 = $iso_3166_2 ".
"WHERE osm_id = $osm_id ".
' -- '.__FILE__.' : '.__LINE__;
$this->bdd->requeter($requete);
}
}
}
private function getTags($tagsInfos) {
$tags = array();
$clesValeurs = explode(',', $tagsInfos);
foreach ($clesValeurs as $cleValeur) {
list($cle, $val) = explode('=>', $cleValeur);
$tags[trim($cle, '"')] = trim($val, '"');
}
return $tags;
}
private function mettreAJourIdZoneGeo() {
$requete = 'UPDATE osm_zones_admin '.
"SET id_zone_geo = if(code_insee != '' AND niveau = 8, CONCAT('INSEE-C:',code_insee), ".
"if(code_insee != '' AND niveau = 6, CONCAT('INSEE-D:',code_insee), ".
"if(code_insee != '' AND niveau = 4, CONCAT('INSEE-R:',code_insee), ".
"if(code_iso_3166_2 != '', CONCAT('ISO-3166-2:',code_iso_3166_2), ".
"if(code_iso_3166_1 != '', CONCAT('ISO-3166-1:',code_iso_3166_1), ".
"CONCAT('OSM-ID:',osm_id)))))) ".
' -- '.__FILE__.' : '.__LINE__;
$this->bdd->requeter($requete);
}
}