{{tag>ogr2ogr pgsql2shp php batch récursivité GGis}}
====== Exemples d'utilisation d'ogr2ogr et de pgsql2shp======
* [[outils:ogr2ogr:cas_d_utilisation:qgis_action_export_ogr2ogr]]
===== Intégrer un fichier plat à la base de données =====
ogr2ogr -f "PostgreSQL" PG:"host= user= dbname= password=" ATLAS_OPIE.csv -nln import.opie
===== Inventorier les données du réseau =====
Prévoir le catalogage des données nécessite d'avoir une idée des couches SIG contenues dans le SI historique.
Le script php ci-dessous explore récursivement les chemins passés en paramètre dans le tableau $chemin et insère dans la bdd les éléments relatifs à tous les fichiers TAB renvoyés par ogrinfo.
/* A faire :
récupérer et structurer le plus d'infos possibles pour alimenter les métadonnées : extebnt, attributs, nombre d'objets, projection
d:
CD D:\INFORMATIQUE\scripts_utilitaires
php -c "C:\Program Files\ms4w\Apache\cgi-bin\php.ini" explore_sig.php
*/
/* Nécéssite la création dans la bdd de la table ci-dessous
CREATE TABLE fichiers_sig_a_cataloguer
(
id serial NOT NULL,
nom_fichier character varying(254),
repertoire_parent character varying(254),
ogrinfo text,
CONSTRAINT pk_fichier_sig_a_cataloguer PRIMARY KEY (id)
)
*/
echo ("bonjour");
/* MODIFIEZ LES PARAMERTRES CI DESSOUS */
$chemin=array('\\Sig\C\SIG\2. Inventaire_connaissance','\\Sig\C\SIG\4. Planification_gestion action','\\Sig\C\SIG\5. Documents_CENLR','\\Marsilee\D\CEN_Actions','\\Marsilee\D\SIG','\\Karine\Mario_3','\\Acer-9993e62908\DOCUMENTS\Thomas','\\Carto\BENJAMIN\PROGRAMMES','\\Bota\DOCUMENTS\JEREMIE');
$extension='TAB';
/* Fin du Paramétrage */
function explore_sig($nom_rep,$profondeur_max=30,$profondeur=0,$nb_fichiers=0,$extension){
echo "examen de l'arborescence : $nom_rep\n\n";
//echo $extension;
if($profondeur>=$profondeur_max){
error_log("Profondeur max $profondeur_max atteinte dans $nom_rep.");
return false;
}
$sous_repertoires=array(); // on définit un tableau qui contiendra les sous-repertoires
$fichiers=array(); // on définit un tableau qui contiendra les fichiers
if(is_dir($nom_rep) && is_readable($nom_rep)){ // si le repertoire courant est un répertoire et s'il est listable
echo "Répertoire $nom_rep\n";
$d=dir($nom_rep);
while ($f=$d->read()){ // tant que le réperoire contient des fichiers
if(('.'==$f)||('..'==$f)){ // on évite . et ..
continue; // on continue
}
if (is_dir("$nom_rep/$f")){ // si le fichiers courant est un repertoire
array_push($sous_repertoires,"$nom_rep/$f"); // on l'ajoute au tableau des sous-repertoires
}
else {
array_push($fichiers,"$nom_rep/$f");
if ((preg_match('/\.'.strtolower($extension).'$/',"$nom_rep/$f"))||(preg_match('/\.'.strtoupper($extension).'$/',"$nom_rep/$f"))) {
$nb_fichiers=$nb_fichiers+1;;
echo " à documenter :\n";
echo " - ".basename("$nom_rep/$f")."\n ";
if (preg_match('/\.'.strtolower($extension).'$/',"$nom_rep/$f")){
$fichier_sans_extension=basename("$nom_rep/$f",'.'.strtolower($extension));
}
elseif (preg_match('/\.'.strtoupper($extension).'$/',"$nom_rep/$f")){
$fichier_sans_extension=basename("$nom_rep/$f",'.'.strtoupper($extension));
}
$fichier_avec_extension=basename("$nom_rep/$f");
$commande=str_replace('/','\\','ogrinfo -ro -al -geom=NO "'.$nom_rep.'\\'.$fichier_avec_extension.'">C:\tmp\ogrinfo.txt');
echo "\ncommande : ".$commande."\n\n";
shell_exec($commande);
if ($fh = fopen('C:/tmp/ogrinfo.txt',r)) {echo("Fichier ouvert !");};
$ogrinfo='';
While (($s = fgets($fh,1024))&&(!preg_match('/^OGRFeature/',$s))) {
$ogrinfo.=$s;
}
echo $ogrinfo;
if ($fh2 = fopen($nom_rep.'\\'.$fichier_avec_extension,r)) {echo("Fichier TAB ouvert !");};
$tab=fread($fh2,filesize($nom_rep.'\\'.$fichier_avec_extension));
echo $tab;
//if($sortie=substr(shell_exec($commande),2000)){
//echo pg_escape_string($sortie);
$dbconn = pg_pconnect("host=192.168.1.40 port=5432 dbname=sicen user=dba password=dbroot");
$requete = "INSERT INTO fichiers_sig_a_cataloguer(nom_fichier, repertoire_parent, ogrinfo, tab) VALUES ('".pg_escape_string($fichier_avec_extension)."', '".pg_escape_string($nom_rep)."', '".pg_escape_string($ogrinfo)."', '".pg_escape_string($tab)."');";
//echo $requete;
$result = pg_query($dbconn, $requete);
if (!$result){
echo "Une erreur s'est produite.\n";
exit;
}
else {echo "Insertion réalisée.\n";}
}
}
}
$d->close();
foreach ($sous_repertoires as $sous_repertoire){
$fichiers = array_merge($fichiers,explore_sig($sous_repertoire,$profondeur_max,$profondeur+1,$nb_fichiers,$extension));
}
}
else echo "échec";
return $fichiers;
}
foreach ($chemin as $chemin){
explore_sig(pg_escape_string($chemin),50,0,0,$extension);
}
?>
===== Créer un fichier GPX a partir de coordonnées =====
Il suffit que les colonnes name, long et lat soient nommées dans le fichier initial :
On crée un mif ou autre à partir du txt, en wgs 84 ensuite ogr2ogr fait la transformation
ogr2ogr -f "GPX" -dsco GPX_USE_EXTENSION=YES -nlt POINT Quadrats_Coléo.gpx Quadrats_Coléo.MIF
===== Transformer des MIF en TAB =====
#!/bin/bash
for rep in `ls -d /chemin_vers_mon_rep/`; do
for mif in `find $rep -iname "*.MIF"`; do
#echo $mif|cut -d"." -f1
echo ogr2ogr -f \"MapInfo File\" $(echo $mif | cut -d"." -f1).tab $mif
eval ogr2ogr -f \"MapInfo File\" $(echo $mif | cut -d"." -f1).tab $mif
done
done
===== Explorer, reprojeter et/ou convertir une arborescence de fichiers =====
==== Commande dos ====
for /R %F IN (*.tab) DO ogr2ogr -f "ESRI ShapeFile" -s_srs "EPSG:2154" -t_srs "EPSG:2154" "%~dF%~pF%~nF.shp" "%F"
* %~dF est la lettre du lecteur (drive) contenant le fichier,
* %~pF est le chemin (path) du fichier sur ce lecteur,
* %~nF est le nom du fichier sans extension.
//ressource : [[http://blogs.msdn.com/b/ben/archive/2007/03/09/path-manipulation-in-a-batch-file.aspx]]//
==== Commande bash ====
==== Ancien script php ====
Ce script a été remplacé avantageusement depuis par la commande ci-dessus
/*
commenter / décommenter les lignes 39 ou 42 selon que l'on veut créer du tab ou du shp
dans l'appel de fonction à la dernière ligne, modifier votre chemin et l'extension des fichiers à reprojetter, la profondeur de l'arborescence fixée à 30 doit suffire.
*/
echo "examen de l'arborescence : \n\n";
function reproj_dir($nom_rep,$extension,$options, $suffixe, $profondeur_max=30,$profondeur=0,$nb_fichiers=0,$chemin_ogr){
/*
$nom_rep = dossier à reprojeter
$extension = tab ou shp
$option = les options d'ogr2ogr, ici par exemple : -f "ESRI Shapefile" -a_srs "EPSG:2154" -t_srs "EPSG:2154"
$chemin_ogr = le chemin complet du répertoire qui contient ogr
*/
//echo $extension;
if($profondeur>=$profondeur_max){
error_log("Profondeur max $profondeur_max atteinte dans $nom_rep.");
return false;
}
$sous_repertoires=array(); // on définit un tableau qui contiendra les sous-repertoires
$fichiers=array(); // on définit un tableau qui contiendra les fichiers
if(is_dir($nom_rep) && is_readable($nom_rep)){ // si le repertoire courant est un répertoire et s'il est listable
echo "Répertoire $nom_rep\n";
$d=dir($nom_rep);
while ($f=$d->read()){ // tant que le réperoire contient des fichiers
if(('.'==$f)||('..'==$f)){ // on évite . et ..
continue; // on continue
}
if (is_dir("$nom_rep/$f")){ // si le fichiers courant est un repertoire
array_push($sous_repertoires,"$nom_rep/$f"); // on l'ajoute au tableau des sous-repertoires
}
else {
array_push($fichiers,"$nom_rep/$f");
if ((preg_match('/\.'.strtolower($extension).'$/',"$nom_rep/$f"))||(preg_match('/\.'.strtoupper($extension).'$/',"$nom_rep/$f"))) {
$nb_fichiers=$nb_fichiers+1;;
echo " à traduire :\n";
echo " - ".basename("$nom_rep/$f")."\n ";
if (preg_match('/\.'.strtolower($extension).'$/',"$nom_rep/$f")){
$fichier_sans_extension=basename("$nom_rep/$f",'.'.strtolower($extension));
}
elseif (preg_match('/\.'.strtoupper($extension).'$/',"$nom_rep/$f")){
$fichier_sans_extension=basename("$nom_rep/$f",'.'.strtoupper($extension));
}
$fichier_avec_extension=basename("$nom_rep/$f");
/* vers esri */
$commande=str_replace('/','\\',$chemin_ogr.'\ogr2ogr '.$options.' "'.$nom_rep.'\\'.str_replace('.$suffixe.','',str_replace(',','',(str_replace(' ','_',$fichier_sans_extension)))).''.$suffixe.'.shp" "'.$nom_rep.'\\'.$fichier_avec_extension.'"');
/* vers mapinfo */
//$commande=str_replace('/','\\',$chemin_ogr.'\ogr2ogr '.$options.' "'.$nom_rep.'\\'.str_replace(''.$suffixe.'','',str_replace(',','',(str_replace(' ','_',$fichier_sans_extension)))).'.tab" "'.$nom_rep.'\\'.$fichier_avec_extension.'"');
echo "\ncommande : ".$commande."\n\n";
$sortie = shell_exec($commande);
echo "$sortie\n";
//exec($commande);
}
}
}
$d->close();
foreach ($sous_repertoires as $sous_repertoire){
$fichiers = array_merge($fichiers,reproj_dir($sous_repertoire,$extension,$options,$suffixe, $profondeur_max,$profondeur+1,$nb_fichiers,$chemin_ogr));
}
}
else echo "échec";
return $fichiers;
}
reproj_dir('D:\mapinfo38','tab','-f "ESRI Shapefile" -a_srs "EPSG:2154" -t_srs "EPSG:2154"','_new', 30,0,0,'C:\OSGeo4W\bin');
?>