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Ă© ?

#1 Wed 15 September 2010 08:39

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 628

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: 1566

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: 954
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: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 628

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: 1566

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: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 628

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: 954
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: 1566

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

Copyright Association GeoRezo