/branches/v5.7-arrayanal/scripts/modules/osm/OrdonneurDeChemins.php |
---|
File deleted |
\ No newline at end of file |
/branches/v5.7-arrayanal/scripts/modules/osm/MiseAJour.php |
---|
File deleted |
\ No newline at end of file |
/branches/v5.7-arrayanal/scripts/modules/osm/ParseurOsm.php |
---|
File deleted |
\ No newline at end of file |
/branches/v5.7-arrayanal/scripts/modules/osm/PolygoneCreateur.php |
---|
File deleted |
\ No newline at end of file |
/branches/v5.7-arrayanal/scripts/modules/osm/PolygoneReparateur.php |
---|
File deleted |
\ No newline at end of file |
/branches/v5.7-arrayanal/scripts/modules/osm/ZonesAdmin.php |
---|
New file |
0,0 → 1,119 |
<?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), '. |
'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); |
} |
} |
/branches/v5.7-arrayanal/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}" |
/branches/v5.7-arrayanal/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,20 |
case 'chargerStructureSql' : |
$this->chargerStructureSql(); |
break; |
case 'analyser' : |
$script = $this->chargerClasse('ParseurOsm'); |
case 'cm' : |
case 'cmCreer' : |
case 'cmSupprimer' : |
$script = $this->chargerClasse('FranceCommunes'); |
$script->executer(); |
break; |
case 'ordre' : |
$script = $this->chargerClasse('OrdonneurDeChemins'); |
case 'za' : |
case 'zaCreer' : |
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!"); |
} |
/branches/v5.7-arrayanal/scripts/modules/osm/FranceCommunes.php |
---|
New file |
0,0 → 1,61 |
<?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->supprimerTableOsmCommunes(); |
$this->conteneur->getEfloreCommun()->chargerStructureSql(); |
$this->creerTableOsmCommunes(); |
break; |
case 'cmCreer' : |
$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 admin_level = 8 ". |
"AND (ref_insee IS NOT NULL OR ref_insee != '') ". |
"AND CHAR_LENGTH(ref_insee) = 5 ". |
' -- '.__FILE__.' : '.__LINE__; |
$this->bdd->requeter($requete); |
} |
} |