ogr2ogr -f "PostgreSQL" PG:"host=<mon serveur> user=<mon nom> dbname=<mydb> password=<mupwd>" ATLAS_OPIE.csv -nln import.opie
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); } ?>
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
#!/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
for /R %F IN (*.tab) DO ogr2ogr -f "ESRI ShapeFile" -s_srs "EPSG:2154" -t_srs "EPSG:2154" "%~dF%~pF%~nF.shp" "%F"
ressource : http://blogs.msdn.com/b/ben/archive/2007/03/09/path-manipulation-in-a-batch-file.aspx
Attention
<? /* 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'); ?>