Chargement Shapefiles dans PostGIS en batch

Il existe un moyen vraiment simple de charger le contenu d'un répertoire de shapefiles dans une base de données Posgresql/PostGIS avec les outils, shp2pgsql et psql. L'utilitaire permettant de charger les commandes SQL (psql) interdit la saisie d'un mot de passe en clair dans une ligne de commande. Pour contourner ce problème, on peut configurer un fichier .pgpass. Le contenu de ce fichier prend cette forme: nom_hote:port:database:nomutilisateur:motdepasse Il est impératif de changer les droits d'accès à ce fichier sinon psql n'en tiendra pas compte.
sudo vim ~/.pgpass
sudo chmod 0600 ~/.pgpass
Par la suite, j'utilise ce petit bash pour générer les lignes de commandes. Ici je transforme le nom du shapefiles en minuscule parce que Postrgresql est "case sensitive" et c'est plus propre de garder les noms de tables en minuscules:
vim shp2sqlfile.sh
---> ajouter ces lignes:
#!/bin/bash
for f in *shp
do
  name=$(basename $f .shp| tr '[A-Z]' '[a-z]')
  echo /usr/lib/postgresql/9.1/bin/shp2pgsql -c -I -W "latin1" -s "EPSG:4326" -g "the_geom" $f $name "| psql -d my_geodb -h localhost -U postgres -w"
done
Ne reste plus qu'a exécuter le batch et rediriger dans un fichier de commandes:
$ sh shp2sqlfile.sh >batch.sh

Charger un CSV avec psql dans Postgresql

Pour convertir un fichier CSV avec des coordonnées x,y en champ de type géométrie dans PostGIS, on peux utiliser la commande COPY en ligne de commande psql! 1) Copier le fichier CSV dans un répertoire visible du serveur Posrgresql. Dans le cas de Linux utiliser sudo et changer les droits du fichier CSV: sudo cp fichier_csv dans_repertoire_postgresql sudo chown postgres:postgres fichier_csv 2)Créer la table dans Postgres create table ma_table ( code character(10) NOT NULL, poste character(100) NOT NULL, adresse character(100) NOT NULL, municipalite character(100) NOT NULL, cp character(7) NOT NULL, _lat float, _long float, CONSTRAINT ma_table_pk PRIMARY KEY (code) ); 3)Charger les données du fichier CSV: set client_encoding='LATIN1'; COPY ma_table FROM '/srv/postgresql/scripts/ma_table.csv' delimiter ';'; 4)Ajouter la colonne geométrique select AddGeometryColumn ('public','ma_table','the_geom',4326,'POINT',2); 5)faire le update à partir des coordonnées x,y UPDATE ma_table set the_geom = ST_GeomFromText('POINT('||_long||' '|| _lat||')',4326); 6) Enjoy!