banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Wed 15 September 2010 08:39

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Postgresql : importer tous les fichiers d'un dossier

Bonjour,

Je suis quasiment sûr que le sujet a déjà été abordé mais je n'arrive pas à le retrouver.
Je souhaite, par l'intermédiaire d'un .bat sous windows,  importer tous les shapes(avec SHP2PGSQL) ou tous les fichiers CSV (avec COPY ou INSERT) d'un même répertoire sans avoir à donner le nom de chacun mais seulement le nom du dossier.


Sous Linux, il me semble que ca ressemble à ceci pour l'import de shp:

Code:

for i in $(find . | grep shp);do shp2pgsql -dDI $i $(basename $i .shp) | psql madatabase;done

Merci d'avance


Pascal PLUVINET

Hors ligne

 

#2 Wed 15 September 2010 09:32

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1538

Re: Postgresql : importer tous les fichiers d'un dossier

ppluvinet a écrit:

Bonjour,

Je suis quasiment sûr que le sujet a déjà été abordé mais je n'arrive pas à le retrouver.
Je souhaite, par l'intermédiaire d'un .bat sous windows,  importer tous les shapes(avec SHP2PGSQL) ou tous les fichiers CSV (avec COPY ou INSERT) d'un même répertoire sans avoir à donner le nom de chacun mais seulement le nom du dossier.


Sous Linux, il me semble que ca ressemble à ceci pour l'import de shp:

Code:

for i in $(find . | grep shp);do shp2pgsql -dDI $i $(basename $i .shp) | psql madatabase;done

Merci d'avance


Bonjour,

Une rapide recherche google: http://jamesewelch.wordpress.com/2008/0 … ugh-files/
wink
Remplacer do call ... par do call shp2pgsql ...

Nicolas

Hors ligne

 

#3 Wed 15 September 2010 10:10

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 944
Site web

Re: Postgresql : importer tous les fichiers d'un dossier

Bonjour,

La solution "toute cuite" ci-dessous, la réponse de Nicolas présentant l'intérêt d'expliquer le raisonnement (une autre ressource est la FAQ batch windows de Developpez http://windows.developpez.com/faq/batch/ )

Code:

for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | psql votre_base

Si vous avez un problème d'encodage (que votre base est en utf-8 et que votre shp est en latin1 par exemple), récupérez iconv sur http://gnuwin32.sourceforge.net/packages/libiconv.htm puis rajouter l'exécutable à votre PATH

La commande sera alors

Code:

for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | iconv -f LATIN1 -t UTF-8 -c | psql votre_base

Cordialement

ThomasG

Dernière modification par ThomasG (Wed 15 September 2010 10:12)

Hors ligne

 

#4 Wed 15 September 2010 11:19

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: Postgresql : importer tous les fichiers d'un dossier

Merci, c'est exactement ce que je cherchais !


Pascal PLUVINET

Hors ligne

 

#5 Wed 15 September 2010 11:27

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1538

Re: Postgresql : importer tous les fichiers d'un dossier

ThomasG a écrit:

Bonjour,

La solution "toute cuite" ci-dessous, la réponse de Nicolas présentant l'intérêt d'expliquer le raisonnement (une autre ressource est la FAQ batch windows de Developpez http://windows.developpez.com/faq/batch/ )

Code:

for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | psql votre_base

Si vous avez un problème d'encodage (que votre base est en utf-8 et que votre shp est en latin1 par exemple), récupérez iconv sur http://gnuwin32.sourceforge.net/packages/libiconv.htm puis rajouter l'exécutable à votre PATH

La commande sera alors

Code:

for /F "usebackq" %%i in (`dir /B *.shp`) do shp2pgsql -s codeepsg -dDi %%i %%~ni | iconv -f LATIN1 -t UTF-8 -c | psql votre_base

Cordialement

ThomasG


Concernant les encodages, shp2pgsql a une option, -W, permettant de preciser l'encodage du fichier shape, et donc de realiser la conversion.

Nico

Hors ligne

 

#6 Wed 15 September 2010 12:14

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: Postgresql : importer tous les fichiers d'un dossier

Mon but était d'importer et assembler de manière automatique un nombre important de shape se trouvant dans un même répertoire. 
Voici le fichier .bat que j'ai créé et qui fonctionne :


Code:

@echo off
mode con LINES=3500 COLS=100
color F1           
cd D:\monrepertoire


dir /B *.shp > liste.txt
for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . liste.txt') do (
echo %%i 
echo %%j
if %%i equ 1  (shp2pgsql -W LATIN1 -s 4326 -dDI %%j schema.nomtable| psql  -U admin  let)
if %%i geq 2  (shp2pgsql -W LATIN1 -s 4326 -aD %%j schema.nomtable   | psql  -U admin  let)
ping 0.0.0.0 -n 1 > NUL 
 )
echo "import fini"
ping 0.0.0.0 -n 30 > NUL

Le premier IF va créer la nouvelle table et ajouter les données du premier shp.
Le deuxième IF ajoute les données des autres shp dans la même table.
Les PING sont juste des temporisations accessoires.
On récupèrera dans liste.txt la liste des fichiers shp.


Merci à vous de m'avoir mis sur les bonnes pistes


Pascal PLUVINET

Hors ligne

 

#7 Wed 15 September 2010 12:42

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 944
Site web

Re: Postgresql : importer tous les fichiers d'un dossier

Salut,

Merci pour la piqûre de rappel sur l'option -W , je l'avais zappé alors que ce n'est pas faute que d'autres l'expliquent...
http://www.neogeo-online.net/blog/archives/74/ ou http://postgis.refractions.net/docs/ch0 … gsql_usage

ThomasG

Dernière modification par ThomasG (Wed 15 September 2010 16:48)

Hors ligne

 

#8 Wed 15 September 2010 13:01

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1538

Re: Postgresql : importer tous les fichiers d'un dossier

ThomasG a écrit:

Salut,

Merci pour la piqûre de rappel sur l'option W , je l'avais zappé alors que ce n'est pas faute que d'autres l'expliquent...
http://www.neogeo-online.net/blog/archives/74/ ou http://postgis.refractions.net/docs/ch0 … gsql_usage

ThomasG


De nada wink
Oui, elle est bien pratique, surtout sous Windows justement, ou iconv n'est pas disponible.

Hors ligne

 

Pied de page des forums

Powered by FluxBB