Table des matières
, , , , ,

Exemples d'utilisation d'ogr2ogr et de pgsql2shp

Intégrer un fichier plat à la base de données

ogr2ogr -f "PostgreSQL" PG:"host=<mon serveur> user=<mon nom> dbname=<mydb> password=<mupwd>" 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"

ressource : http://blogs.msdn.com/b/ben/archive/2007/03/09/path-manipulation-in-a-batch-file.aspx

Commande bash

Ancien script php

Attention

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');
?>