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); } }