Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 1055 → Rev 1056

/trunk/scripts/modules/osm/FranceCommunes.php
New file
0,0 → 1,54
<?php
/**
* Création de la table osm_communes.
* /opt/lampp/bin/php cli.php osm -a communes -m manuel
*
*/
class FranceCommunes {
 
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 'cm' :
$this->creerTableOsmCommunes();
break;
case 'cmSupprimer' :
$this->supprimerTableOsmCommunes();
break;
default :
$this->messages->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
}
 
}
 
private function supprimerTableOsmCommunes() {
$requete = 'DROP TABLE IF EXISTS osm_communes '.
' -- '.__FILE__.' : '.__LINE__;
$this->bdd->requeter($requete);
}
 
private function creerTableOsmCommunes() {
$requete = 'INSERT INTO osm_communes '.
"SELECT osm_id, osm_version, osm_timestamp, name, ref_insee, shape, shape_centroid, wikipedia ".
"FROM {$this->bddOsmNom}.multipolygons_ref ".
"WHERE zone = 'france' AND admin_level = 8 ".
' -- '.__FILE__.' : '.__LINE__;
$this->bdd->requeter($requete);
}
}
/trunk/scripts/modules/osm/ZonesAdmin.php
New file
0,0 → 1,112
<?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->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), '.
'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);
}
}
/trunk/scripts/modules/osm/config.ini
1,9 → 1,12
; Base de données contenant les infos provenant d'OSM
bdd_osm_nom = "osm"
 
; Ajouter les nouvelles version à la suite dans versions et versionsDonnees.
version = "1.0"
version = "2.0"
dossierSql = "{ref:dossierDonneesEflore}osm/"
 
[fichiers]
structureSql = "osm.sql"
structureSql = "osm_v{ref:version}.sql"
 
[chemins]
structureSql = "{ref:dossierSql}{ref:version}/{ref:fichiers.structureSql}"
/trunk/scripts/modules/osm/Osm.php
3,35 → 3,8
/**
* Exemple de lancement du script : :
* 1. Création de la base de données :
* /opt/lampp/bin/php cli.php osm -a chargerStructureSql -m manuel -v 3
* /opt/lampp/bin/php cli.php osm -a communes -m manuel -v 3
*
* 2. Analyse du fichir OSM :
* /opt/lampp/bin/php cli.php osm -a analyser -f "../donnees/osm/fr_communes_new.osm" -m manuel -v 3
*
* 3. Traitement de l'ordre :
* /opt/lampp/bin/php cli.php osm -a ordre -m manuel -v 3
*
* 4. Remplissage des polygones :
* /opt/lampp/bin/php cli.php osm -a polygone -m manuel -v 3
*
* Définition des centroïdes pour les polygones déjà complets:
* /opt/lampp/bin/php cli.php osm -a centre -m manuel -v 3
*
* 5. Remise de l'ordre à zéro :
* /opt/lampp/bin/php cli.php osm -a zero -m manuel -v 3
*
* 6. Traitement de l'ordre des polygones incomplets :
* /opt/lampp/bin/php cli.php osm -a ordonnerPolygoneInc -m manuel -v 3
*
* 7. Remplissage des polygones incomplets :
* /opt/lampp/bin/php cli.php osm -a remplirPolygoneInc -m manuel -v 3
*
* 8. Renommage des polygones incomplets :
* /opt/lampp/bin/php cli.php osm -a renommer -m manuel -v 3
*
* 9. Définition des centroïdes :
* /opt/lampp/bin/php cli.php osm -a centre -m manuel -v 3
*
* @category php 5.4
* @package DEL
* @subpackage Scripts
40,13 → 13,11
* @license CeCILL v2 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt
* @license GNU-GPL http://www.gnu.org/licenses/gpl.html
*/
// TODO : Améliorer la gestion de l'ordre des chemins pour éviter de prendre en compte des chemins inexistants
class Osm extends EfloreScript {
 
const PROJET_NOM = 'osm';
 
protected $parametres_autorises = array(
'-f' => array(true, null, 'Chemin du fichier osm à analyser'),
'-m' => array(false, 'auto', 'Mode «auto» ou «manuel». En manuel, les compteurs dans les boucles sont affichés.'));
 
public function executer() {
59,30 → 30,18
case 'chargerStructureSql' :
$this->chargerStructureSql();
break;
case 'analyser' :
$script = $this->chargerClasse('ParseurOsm');
case 'cm' :
case 'cmSupprimer' :
$script = $this->chargerClasse('FranceCommunes');
$script->executer();
break;
case 'ordre' :
$script = $this->chargerClasse('OrdonneurDeChemins');
case 'za' :
case 'zaCorriger' :
case 'zaMajIdZG' :
case 'zaSupprimer' :
$script = $this->chargerClasse('ZonesAdmin');
$script->executer();
break;
case 'polygone' :
case 'centre' :
case 'zero' :
$script = $this->chargerClasse('PolygoneCreateur');
$script->executer();
break;
case 'ordonnerPolygoneInc' :
case 'remplirPolygoneInc' :
case 'renommer' :
$script = $this->chargerClasse('PolygoneReparateur');
$script->executer();
break;
case 'maj' :
$script = $this->chargerClasse('MiseAJour');
$script->executer();
break;
default :
throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
}