#1 Tue 05 March 2013 13:42
- Mirekium
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 5 Jun 2010
- Messages: 15
Conversion de shapefiles à postgis
Quelques questions concernant la conversion de shapefile à postgis :
1- J’ai installé Postgis 2.0.1 sur postgrsql 9.2.3 ça marche très bien j’arrive à afficher mes cartes via Qgis, sauf que sur mes tables dans Postgrsql je ne vois pas les contraintes habituelles :
-enforce_srid_the_geom
-enforce_dims_the_geom
-enforce_geotype_the_geom
Est ce que c’est normal?!
2- En utilisant l’interface graphique « PostGIS Shapefile and DBF Loader » j’obtiens automatiquement un SRID de valeur ( -1) dans les anciennes versions de postgis et (0) dans la dernière version 2.0.1 , s’agit il d une erreur de conversion ! faut il le modifier et mettre le bon SRID ou on peut le laisser comme ça ? et comment le faire sachant qu’avec la dernière version postgis 2.0.1, on ne voit plus la contrainte enforce_srid_the_geom, et la seul trace du SRID est dans la geometry_columns au niveau des Vues.
Et donc la solution apportée par david.techer sur cette discussion n est plus valable : http://www.forumsig.org/showthread.php?t=19572
3- Dernière question, que ce soit en utilisant l’interface graphique « PostGIS Shapefile and DBF Loader », ou la console avec la commande shp2pgsql ça ne marche qu’on spécifiant l’encodage LATIN1 (il s’agit de l’encodage source si j’ai bien compris) sachant que j’ai besoin de l’encodage UTF-8, et du coup avec l’encodage : LATIN1 les données écrites en caractères non latin s’affichent en points d’interrogation.
A plus
Mirekium
Hors ligne
#2 Tue 05 March 2013 15:29
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Conversion de shapefiles à postgis
Bonjour,
concernant le point 3, si votre shapefile est encodé en latin1, il serait peut être utile d'effectuer un prétraitement et de le convertir en UTF-8 avant de l'enregistrer dans votre bdd (http://gis.stackexchange.com/questions/ … 1-to-utf-8).
Je ne sais pas si shp2pgsql peut convertir des encodages a la volée.
Dernière modification par tumasgiu (Tue 05 March 2013 15:44)
Hors ligne
#3 Tue 05 March 2013 16:23
- Mirekium
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 5 Jun 2010
- Messages: 15
Re: Conversion de shapefiles à postgis
Bonjour tumasgiu
Merci pour le lien : il s agit d'une commande ogr2ogr pour changer d'encodage si j'ai bien compris, en fait mon shape est déjà en UTF-8 ainsi que ma bd sauf que le logiciel "PostGIS Shapefile and DBF Loader" et aussi la commande shp2pgsql t'oblige à mettre LATIN1 comme encodage pour que ça fonctionne et peu importe l'encodage sourde ou destination que t'as , quand il s'agit de lettres latines il n y a pas de problème j ai un UTF-8 en source et aussi en destination sur la bd tant que ça marche, mettre LATIN1 sur "PostGIS Shapefile and DBF Loader" ou dans la commande shp2pgsql ça me dérange pas , sauf quand c'est des lettres non latines , on obtient des points d’interrogation à leur place !!!
peut être un ogr2ogr qui transforme un shape en postgis serait meilleur dans ce cas!
Hors ligne
#4 Tue 05 March 2013 16:41
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Conversion de shapefiles à postgis
Bonjour,
La nouvelle version de Postgis change des choses:
Point 1: les contraintes ne sont plus nécessaires et sont remplacées par la fonctionnalité "typemod" permettant de definir des modifications du type geometrie: lors de la definition de la colonne geo, on peut ecrire:
geom geometry(Point, 2154);
Ce qui veut dire: une geometrie de type POINT en SRID 2154.
Du coup, Postgresql vérifie, comme avec des contraintes, que type et SRID soient respectés.
(c'est tres puissant)
Point 2: L'OGC a changé le code "SRID non défini" en le passant de -1 a 0, donc les données chargées dans PGis 2.0 sans préciser le SRID auront 0 comme SRID.
Point 3:
Si le DBF du shapefile est bien en UTF8, alors SHP2PGSQL ne se plaindra pas.
Il ne FAUT PAS mettre LATIN1 si ce n'est pas l'encodage du shapefile !
Shp2pgsql donne un conseil en citant LATIN1 comme encodage possible de la source.
S'il y a des caractères bizarres dans Postgresql apres import avec shp2pgsql, c'est que l'encodage de la source n'est pas le bon. Il vous faut demander au fournisseur de la donnée quel est l'encodage.
Il n'y a pas besoin de convertir le shapefile avant d'utiliser shp2pgsql, l'option -W permet justement cela.
Nicolas
Hors ligne
#5 Wed 25 September 2013 15:10
- diletant2
- Participant occasionnel
- Date d'inscription: 10 Feb 2010
- Messages: 36
Re: Conversion de shapefiles à postgis
Bonjour,
A propos du point 3), je rencontre un problème avec l'insertion d'un shapefile dans une base PostGIS
La génération du script .sql par shp2pgsql est ok : un fichier .sql est créé.
Code:
shp2pgsql -c -D -s 4326 -W "UTF-8" fichier.shp schema.table
mais je reçois le message d'erreur suivant sur une des lignes du fichier .sql lors de l'exécution de psql
Code:
psql -f fichier.sql -h host -d dbname -U user
psql:fichier.sql:1543079: ERROR: c
haracter 0x81 of encoding "WIN1252" has no equivalent in "UTF8"
CONTEXTE : COPY nw, line 1481079
ROLLBACK
Pourtant, mon shapefile (dbf) à insérer est censé être encodé en UTF-8, tout comme la base
Code:
ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;
à aucun moment, je ne spécifie quoique ce soit en WIN1252 !!
Dernière modification par diletant2 (Wed 25 September 2013 15:49)
Hors ligne
#6 Wed 25 September 2013 17:46
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Conversion de shapefiles à postgis
Bonsoir,
Pouvez-vous tester en enchainant les deux commandes ?
shp2pgsql -W "UTF-8" ... | psql -h host -d dbname -U user
Nicolas
Hors ligne
#7 Wed 25 September 2013 17:57
- diletant2
- Participant occasionnel
- Date d'inscription: 10 Feb 2010
- Messages: 36
Re: Conversion de shapefiles à postgis
Problème résolu !
Voici l'explication : au début du fichier .sql le programme shp2pgsql insère à la 1e ligne la commande SQL suivante
Code:
SET ENCODING_CLIENT UTF8
Cette commande ne fonctionne pas comme l'indique ce ticket
yigJ7Sw2XXdb-t-PxLA@">http://www.postgresql.org/message-id/CA … .gmail.com mail.gmail.com
et donc la commande psql
Code:
\echo :ENCODING
me renvoyait
WIN1252
qui doit donc être la valeur par défaut (!!??)
en règlant la variable d'environnement du client : PGCLIENTENCODING à UTF8
La commande fonctionne
Code:
psql -f fichier.sql -h host -d dbname -U user
Hors ligne
#8 Wed 25 September 2013 18:49
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Conversion de shapefiles à postgis
Salut,
me renvoyait
WIN1252
qui doit donc être la valeur par défaut (!!??)
effectivement, j'ai souvenance que c'est la locale par défaut lors d'une installation windows.
Merci du retour en tout cas.
Hors ligne