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 22 July 2015 22:07

bebert_lama
Participant assidu
Date d'inscription: 9 Nov 2006
Messages: 253

pgsql2shp problème encodage

Bonjour à tous,

je craque, voilà mon soucis :

j'utilise shp2pgsql pour mettre des shapefiles dans ma base postgis. Ma base de données est encodée en UTF-8, les shapefiles sont encodés en UTF-8 (encodage par défaut et fichier .cpg associé), il y a de nombreuses valeurs avec des caractères accentués.

Ma table Postgres affiche correctement les caractères accentués, de plus je précise l'option -W "utf-8" de shp2pgsql...(d'après la doc l'option est inutile si l'encodage du shp est utf-8). Si je ne mets rien comme option -W, ou si je mets -W "latin1" alors l'import ne fonctionne pas ou les caractères ne sont pas affichés correctement. ex: les é s'affiche é (ou un truc du genre)

Remarque : le code sur lequel je travaille fonctionnait avec shp2pgsql -W "latin1" auparavant...

Mon problème est que quand j'exporte mes résultats avec pgsql2shp je n'arrive jamais à avoir les caractères accentués correctement dans le shapefile de sortie.

Autres questions en vrac : quel paramètre pour spécifier l'encodage posgtres ? PGCLIENTENCODING ? Encodage OS, quel rapport avec mes données ? Pourquoi si je mets tout en Latin1 cela ne fonctionne pas ? idem si tout en UTF-8 ? Bref, je ne comprends plus rien...


Merci pour vos idées, et recommandations.


Bertrand

Hors ligne

 

#2 Wed 22 July 2015 22:33

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9857
Site web

Re: pgsql2shp problème encodage

Bonsoir,

Donc dans la base de données, les accents sont correctes quand tu importes les données ?

Comment peux tu dire que les accents sont incorrectes dans ton export ? Peux tu partagé ton shp en sortie ?

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Wed 22 July 2015 23:13

bebert_lama
Participant assidu
Date d'inscription: 9 Nov 2006
Messages: 253

Re: pgsql2shp problème encodage

Bonsoir Yves,

Merci de me répondre.

Malheureusement je n'ai ni les données, ni les commandes à la maison... Demain pourquoi pas.

Oui, les accents s'affichent correctement à l'import avec -W "utf-8" en option.

Je visualise mes shapefiles avec ArcGIS soit directement dans un dossier (shapefile) soit en FeatureClass (dans une geodatabase).

Avec QGIS, quand je mets encodage "System" les accents sont mauvais, quand je spécifie "UTF-8" c'est correct...

Merci

Bertrand

Hors ligne

 

#4 Thu 23 July 2015 09:07

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9857
Site web

Re: pgsql2shp problème encodage

Bonjour Bertrand,

Il n'y aucun soucis dans tes données (bonne nouvelle). Quand tu exportes tes données en shp à partir de ta base en UTF8, tes données sont en UTF8. C'est pour cela que dans QGIS, lorsque tu définies ton encodage en UTF8, tout est correct.

Par contre dans ArcGIS et dans QGIS si tu laisses système ou latin1, cela ne correspond plus. Je suppose qu'ArcGIS ne gère que le latin1 comme encodage des shp.  Les systèmes windows sont par défaut en latin1 (le terme système dans QGIS signifie qu'il utilise l'encodage du système).

La solution que je voie actuellement est d'ouvrir le shp dans QGIS, choisir le bon encodage soit dans la fenêtre d'ouverture d'un fichier vecteur soit dans les propriétés de la couche après avoir chargé le fichier et de sauvegarder ton fichier (clic droit dans la liste des couches > Sauvegarder sous ...) et de bien choisis système pour le paramètre encodage.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Thu 23 July 2015 10:08

bebert_lama
Participant assidu
Date d'inscription: 9 Nov 2006
Messages: 253

Re: pgsql2shp problème encodage

Bonjour Yves, Bonjour Tous,

Je vais tester cette solution mais cela ne m'arrange pas... j'ai plein de FeatureClass dans ma geodatabase...

La commande d'export est :

pgsql2shp -f "C:\_Data\PROJET\roads_pgsql2shp.shp" -g geom -u user -h localhost -p 5432 -P pwd PROJET "select id, speed_cat, dir_travel, res_vehicle, res_pedestrian, length, level_ft, level_tf, edge_name, type_troncon, st_transform(the_geom,4326) as the_geom, edge_name AS direction, link_id FROM public.streetedge ORDER BY objectid"

Les données sont des fichiers roads.shp de OSM tout à fait classiques importées avec shp2pgsql.
Je vous tiens au courant.
Merci encore

A+

Bertrand

Hors ligne

 

#6 Thu 23 July 2015 10:55

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9857
Site web

Re: pgsql2shp problème encodage

Bertrand,

Je ne vois qu'un moyen :

Code:

ogr2ogr.exe "C:\_Data\PROJET\roads_pgsql2shp.shp" -sql "select id, speed_cat, dir_travel, res_vehicle, res_pedestrian, length, level_ft, level_tf, edge_name, type_troncon, st_transform(the_geom,4326) as the_geom, edge_name AS direction, link_id FROM public.streetedge ORDER BY objectid" PG:'dbname=formation user=user password=PROJET port=5432 host=localhost'

Peu testé donc il doit y avoir 2-3 réglages à faire, mais le fichier est en latin1 chez moi. Sinon tu as des options de création : http://gdal.gloobe.org/ogr/formats/shap … de-couches

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#7 Fri 24 July 2015 13:56

bebert_lama
Participant assidu
Date d'inscription: 9 Nov 2006
Messages: 253

Re: pgsql2shp problème encodage

Bonjour à tous,

je pense avoir résolu mon soucis d'encodage de shapefiles.

1> Import via shp2pgsql et l'option -W "UTF-8"

2> Export via pgsql2shp en précisant > SET PGCLIENTENCODING=LATIN1 avant la commande

Résultat dans ma base (UTF-8), l'encodage est correct, et mes shp ou FC dans la geodatabase sont corrects également.
Je vais tester sur plusieurs données afin de valider.

Merci Yves.

Bertrand

Hors ligne

 

#8 Fri 24 July 2015 14:11

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9857
Site web

Re: pgsql2shp problème encodage

Bonjour,

Ah ! Je ne savais pas que la variable d'environnement PGCLIENTENCODING fonctionnait aussi pour pgsql2shp smile

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#9 Wed 16 September 2015 16:34

bebert_lama
Participant assidu
Date d'inscription: 9 Nov 2006
Messages: 253

Re: pgsql2shp problème encodage

Bonjour à tous,

quelques éléments de réponse, et je me permet de citer les dires de Monsieur Saez :

Nous avons également rencontré des problèmes lors de l'alimentation de bases PostGIS en UTF8 à partir de shapefiles encodés en WIN1252.
Le problème provient de la version 1.9.0 d'OGR.

Quelques explications...
L'encodage d'un DBF est normalement indiqué dans la partie header du fichier. Plus précisément au niveau du byte 29, celui qui indique le "Language driver ID", plus communément appelé LDID. Il existe une limitation intrinsèque à cette structure. C'est pour cette raison qu'ESRI, inventeur du format shapefile (.shp) a étendu cette possibilité en précisant l'encodage des attributs utilisés dans le DBF en créant un fichier d'extension .cpg (pour code page). Ce fichier porte le même nom que le shapefile et ne contient que le texte correspondant à l'encodage.

Pour plus d'info du le DBF :
cf. http://www.dbase.com/KnowledgeBase/int/db7_file_fmt.htm
cf. http://www.clicketyclick.dk/databases/x … t/dbf.html

Il existe un problème avec la version 1.9.0 d'OGR. Le driver shp interprète l'encodage (dans le LDID ou le .cpg) pour faire la conversion et renvoyer le flux en UTF-8 (cf. http://www.gdal.org/drv_shapefile.html).
L'encodage des données dans la plupart de nos DBF est bien du WIN1252. Le problème que l'on avait c'est qu'on disait à PostgreSQL que le flux était en WIN1252 alors qu'ogr2ogr, avec sa détection et conversion interne en UTF8, renvoyé de l'UTF8 et non du WIN1252.
La solution est donc de dire à OGR de "ne pas détecter l'encodage" du shapefile source.
Ceci ce fait en mettant la variable d'environnement SHAPE_ENCODING à ""
Il existe une autre façon avec les commande GDAL/OGR de positionner une variable d'environnement à l'exécution, c'est en précisant :
--config SHAPE_ENCODING ""

Pour alimenter nos bases (nous sommes sous Linux Debian) nous précisons dans nos scripts 2 variables d'environnement afin d'éviter de préciser ces dernières dans les lignes de commandes ogr2ogr :
export SHAPE_ENCODING=""
export PGCLIENTENCODING="WIN1252"

Pour résumé :
SHAPE_ENCODING="" : permet de dire à ogr de ne pas tenter de déterminer l'encodage des données attributaires des shapefiles.
PGCLIENTENCODING="WIN1252" : permet de dire à PostgreSQL qu'on va lui fournir des flux en WIN1252. C'est PostgreSQL qui fera lui-même la conversion de ce flux vers l'encodage de la base (UTF8 est de rigueur comme bonnes pratiques).

Et ça marche nickel !

Cordialement

Laurent SAËZ


Je n'ai pas encore tester mais d'après les problèmes que j'ai rencontrés cela parait l'explication la plus détaillée et argumentée que j'ai trouvée.

Merci

Bertrand

Hors ligne

 

Pied de page des forums

Powered by FluxBB