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