{{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. =$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 =$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'); ?>