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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 09 August 2012 09:35

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

[GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

Bonjour,

Je souhaite importer le couche GéoFla de l'IGN dans ma base de données donnée spatialisé sous Postgresql en renommant mes champs et en convertissant la projection pour l'insertion.

J'utilise la commande suivante qui fonctionne très bien.

PGCLIENTENCODING=iso-8859-1 ogr2ogr -overwrite -f "PostgreSQL" PG:"host=localhost user=jerome password=MyPass dbname=MyBase port=5432" COMMUNE.MIF -nln ign_town_fra_1999 -lco GEOMETRY_NAME=geometry -s_srs EPSG:27572 -t_srs EPSG:4326


Maintenant si je souhaite renommer les noms des colonnes, j'utilise l'option sql

PGCLIENTENCODING=iso-8859-1 ogr2ogr -overwrite -f "PostgreSQL" PG:"host=localhost user=jerome password=MyPass dbname=MyBase port=5432" COMMUNE.MIF -nln ign_town_fra_1999 -lco GEOMETRY_NAME=geometry -s_srs EPSG:27572 -t_srs EPSG:4326 -sql "SELECT Id_GéoFLA as geofla_id FROM COMMUNE"


Ducoup, j'ai cette erreur:

ERROR 1: Unrecognised field name Id_GéoFLA.


J'ai du coup pensé à l'encodage des champs car sous Linux la console est en UTF-8. Avec la commande ogrinfo j'ai des caractères non reconnu. En effet un fichier MAPINFO n'est pas restrictif sur l'encodage des nom des champs (non Ascii) donc l'encodage doit aussi être pris en compte dans le nom des colonnes contenant des caractères accentués

Avec cette commande j'ai corrigé mon affichage pour ogrinfo :

ogrinfo -so COMMUNE.MIF COMMUNE | iconv -f iso-8859-1


Résultat :

Had to open data source read-only.
INFO: Open of `COMMUNE.MIF'
      using driver `MapInfo File' successful.

Layer name: COMMUNE
Geometry: Unknown (any)
Feature Count: 36583
Extent: (47680.000000, 1620478.000000) - (1197822.000000, 2677441.000000)
Layer SRS WKT:
PROJCS["unnamed",
    GEOGCS["unnamed",
        DATUM["NTF_Paris_Meridian",
            SPHEROID["Clarke 1880 (modified for IGN)",6378249.2,293.4660213],
            TOWGS84[-168,-60,320,-0,-0,-0,0]],
        PRIMEM["non-Greenwich",2.337229166667],
        UNIT["degree",0.0174532925199433]],
    PROJECTION["Lambert_Conformal_Conic_2SP"],
    PARAMETER["standard_parallel_1",45.898918964419],
    PARAMETER["standard_parallel_2",47.696014502038],
    PARAMETER["latitude_of_origin",46.8],
    PARAMETER["central_meridian",2.337229104484],
    PARAMETER["false_easting",600000],
    PARAMETER["false_northing",2200000],
    UNIT["Meter",1]]
Id_GéoFLA: Integer (254.0)
Code_Commune: String (3.0)
Nom_Commune: String (50.0)
Statut: String (25.0)
Population: Real (6.1)
Superficie: Integer (254.0)
Abscisse_Chef_Lieu: Integer (254.0)
Ordonnée_Chef_Lieu: Integer (254.0)
Abscisse_Centroïde: Integer (254.0)
Ordonnée_Centroïde: Integer (254.0)
Altitude_Centroïde: Integer (254.0)
Code_Canton: String (2.0)
Code_Arrondissement: String (1.0)
Code_Département: String (2.0)
Nom_Département: String (30.0)
Code_Région: String (2.0)
Nom_Région: String (30.0)


Je me demande si il est possible d'appliquer de la même manière une correction d'encodage dans ogr2ogr pour le renommage des champs à la volée?

edit : petite correction: -a_srs en -s_srs mais ça ne change rien à ma question ;-)

Merci pour votre aide.

Dernière modification par gglafouine (Thu 09 August 2012 16:35)


Jérôme

Hors ligne

 

#2 Tue 14 August 2012 13:43

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

Bonjour,
Personne n'a une idée sur ce problème?

Je pense que je suis obligé de définir LC_ALL en ISO-8859-1 avant de commencer car mon système est totalement en Unicode (UTF-8) mais je ne suis pas sur que ce soit la meilleure chose à faire...

J'aimerai avoir votre avis là dessus.

Merci


Jérôme

Hors ligne

 

#3 Tue 14 August 2012 14:12

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

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

Bonjour,

Le mieux est d'éditer le fichier est de virer cet accent !

Sinon tu as presque trouver la commande mais tu la fais à l'envers :

Code:

iconv -f iso-8859-1  | ogrinfo -so COMMUNE.MIF COMMUNE

Avec iconv tu peux modifier ton fichier directement si tu souhaites automatiser.


Enfin la variable d'environnement PGCLIENTENCODING est une variable utilisée par PostgreSQL pour définir l'encodage en entrée, il n'est pas censé traiter les noms des champs.

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

 

#4 Tue 14 August 2012 17:34

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

Bonjour Yves,

iconv ne change rien à mon problème.
ps : ma commande n'est pas noté à l'envers car ta commande ne m'affiche pas la transformation des caractères dans la console... Mais merci quand même ;-)

la commande suivante :

ogrinfo -so COMMUNE.MIF COMMUNE | iconv -f iso-8859-1


C'est parfait avec ogrinfo car l'affichage se fait dans la console correctement.

Mon problème réside dans l'utilisation de la commande ogr2ogr et avec l'utilisation de l'option -sql avec un jeu de données dont la table attributaire contient des caractères accentués dans les colonnes.
Sachant qu'on n'a pas Mapinfo et que je travaille sous Linux (ubuntu 12.04) histoire de préciser.

Tu fais bien de faire remarquer que PGCLIENTENCODING sert à définir l'encodage en entrée et c'est bien pour ça que je l'utilise. Ce n'est donc pas pour le paramètre -sql que je l'ai défini mais pour que les données que insert soient correctement encodées dans ma base en UTF-8.

Voici ma requête avec l'utilisation de iconv et un pipe suivi de la commande ogr2ogr (j'ai pris q'un champs pour les test):

iconv -f iso-8859-1 | PGCLIENTENCODING=iso-8859-1 ogr2ogr -overwrite -f "PostgreSQL" PG:"dbname=macrosismie" -nln fra_town -nlt MULTIPOLYGON -lco FID=id -lco GEOMETRY_NAME=geometry -s_srs EPSG:27572 -t_srs EPSG:4326 COMMUNE.MIF -sql "select id_géofla FROM commune"


Le retour d'erreur est simple:

ERROR 1: Unrecognised field name id_géofla.


PS: Le renommage des champs je veux bien mais sans MapInfo c'est pas le top surtout pour faire un script de géotraitement qui se base sur les fichiers sources.

As-tu une autre idée (ou une autre personne bien sûr) ^^


Jérôme

Hors ligne

 

#5 Tue 14 August 2012 18:15

rouault
Participant assidu
Date d'inscription: 26 Apr 2009
Messages: 168

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

La problématique est que le driver MapInfo ne modifie pas du tout l'encodage d'origine (qui est du LATIN1) vers le reste de GDAL, qui lui en général attend de l'UTF-8. Ce qui explique de devoir définir PGCLIENTENCODING=iso-8859-1 quand on insère dans PostgreSQL. Ce qui explique également que quand tu tapes une requête -sql avec un accent aigu dans une console UTF-8, du point de vue de OGR qui ne connait qu'une colonne avec un accent encodé en LATIN1, il ne fasse pas le rapprochement entre les noms dans les 2 encodages, et émette le message d'erreur.

Si je ne dis pas de bêtise les fichiers .mif / .mid sont au format texte, donc tu peux avec iconv les recoder en UTF-8 avant de les faire manger par OGR. Quelque chose comme : iconv -f iso-8859-1 < src/commune.mif > dst/commune.mif  et iconv -f iso-8859-1 < src/commune.mid > dst/commune.mid (non testé, mais ça doit être quelque chose d'approchant)

L'autre solution est d'injecter tel quel le fichier dans Postgres (sans le -sql mais avec le PGCLIENTENCODING=iso-8859-1) et ensuite de faire le renommage dans la BD Postgres:

ogrinfo PG:"host=localhost user=jerome password=MyPass dbname=MyBase port=5432" -sql "ALTER TABLE COMMUNE ALTER COLUMN NAME id_géofla to geoflag_id" (toujours non testé, mais ça doit être quelque chose d'approchant)

Hors ligne

 

#6 Thu 16 August 2012 10:10

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

rouault a écrit:

Si je ne dis pas de bêtise les fichiers .mif / .mid sont au format texte, donc tu peux avec iconv les recoder en UTF-8 avant de les faire manger par OGR. Quelque chose comme : iconv -f iso-8859-1 < src/commune.mif > dst/commune.mif  et iconv -f iso-8859-1 < src/commune.mid > dst/commune.mid (non testé, mais ça doit être quelque chose d'approchant)


Ça dans un script Shell ça doit passer donc je vais tester.

rouault a écrit:

L'autre solution est d'injecter tel quel le fichier dans Postgres (sans le -sql mais avec le PGCLIENTENCODING=iso-8859-1) et ensuite de faire le renommage dans la BD Postgres:

ogrinfo PG:"host=localhost user=jerome password=MyPass dbname=MyBase port=5432" -sql "ALTER TABLE COMMUNE ALTER COLUMN NAME id_géofla to geoflag_id" (toujours non testé, mais ça doit être quelque chose d'approchant)


C'est plus ou moins ce que je fais pour l'instant mais avec la commande psql -c car je vois pas bien l'intérêt d'utiliser ogr dans ce cas.

Cette manipulation marche bien mais me pose un problème car je suis obligé de faire un overwrite pour importer mon jeu de donnés car les champs de la table source ne son plus cohérent avec ce de la table de destination.

Je teste un iconv sur le fichier source directement et je reviens vers vous pour le suivi.

édit:
J'ai transformé mon fichier ainsi :

iconv -f iso-8859-15 -t utf-8 COMMUNE.MID > dst/COMMUNE.MID
iconv -f iso-8859-15 -t utf-8 COMMUNE.MIF > dst/COMMUNE.MIF


Résultat : Je crois qu' ogrinfo ne comprend plus grand chose à ce qu'il reçoit hmm

ogrinfo -so dst/COMMUNE.MIF COMMUNE
Warning 502: Field name 'Id_GéoFLA' contains invalid characters. 'Id_G�_oFLA' will be used instead.
Warning 502: Field name 'Ordonnée_Chef_Lieu' contains invalid characters. 'Ordonn�_e_Chef_Lieu' will be used instead.
Warning 502: Field name 'Abscisse_Centroïde' contains invalid characters. 'Abscisse_Centro�_de' will be used instead.
Warning 502: Field name 'Ordonnée_Centroïde' contains invalid characters. 'Ordonn�_e_Centro�_de' will be used instead.
Warning 502: Field name 'Altitude_Centroïde' contains invalid characters. 'Altitude_Centro�_de' will be used instead.
Warning 502: Field name 'Code_Département' contains invalid characters. 'Code_D�_partement' will be used instead.
Warning 502: Field name 'Nom_Département' contains invalid characters. 'Nom_D�_partement' will be used instead.
Warning 502: Field name 'Code_Région' contains invalid characters. 'Code_R�_gion' will be used instead.
Warning 502: Field name 'Nom_Région' contains invalid characters. 'Nom_R�_gion' will be used instead.
Had to open data source read-only.
INFO: Open of `dst/COMMUNE.MIF'
      using driver `MapInfo File' successful.

Layer name: COMMUNE
Geometry: Unknown (any)
Feature Count: 36583
Extent: (47680.000000, 1620478.000000) - (1197822.000000, 2677441.000000)
Layer SRS WKT:
PROJCS["unnamed",
    GEOGCS["unnamed",
        DATUM["NTF_Paris_Meridian",
            SPHEROID["Clarke 1880 (modified for IGN)",6378249.2,293.4660213],
            TOWGS84[-168,-60,320,-0,-0,-0,0]],
        PRIMEM["non-Greenwich",2.337229166667],
        UNIT["degree",0.0174532925199433]],
    PROJECTION["Lambert_Conformal_Conic_2SP"],
    PARAMETER["standard_parallel_1",45.898918964419],
    PARAMETER["standard_parallel_2",47.696014502038],
    PARAMETER["latitude_of_origin",46.8],
    PARAMETER["central_meridian",2.337229104484],
    PARAMETER["false_easting",600000],
    PARAMETER["false_northing",2200000],
    UNIT["Meter",1]]
Id_G�_oFLA: Integer (254.0)
Code_Commune: String (3.0)
Nom_Commune: String (50.0)
Statut: String (25.0)
Population: Real (6.1)
Superficie: Integer (254.0)
Abscisse_Chef_Lieu: Integer (254.0)
Ordonn�_e_Chef_Lieu: Integer (254.0)
Abscisse_Centro�_de: Integer (254.0)
Ordonn�_e_Centro�_de: Integer (254.0)
Altitude_Centro�_de: Integer (254.0)
Code_Canton: String (2.0)
Code_Arrondissement: String (1.0)
Code_D�_partement: String (2.0)
Nom_D�_partement: String (30.0)
Code_R�_gion: String (2.0)
Nom_R�_gion: String (30.0)


Du coup le problème reste le même...
Soit je me suis planté sur la commande iconv soit je suis bien embêté.

Dernière modification par gglafouine (Thu 16 August 2012 10:35)


Jérôme

Hors ligne

 

#7 Fri 17 August 2012 00:58

rouault
Participant assidu
Date d'inscription: 26 Apr 2009
Messages: 168

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

Tu ne t'es pas planté dans la commande iconv, mais j'avais parié sur le fait que le driver MITAB ne regarderait pas le nom des champs, or vu les vérifiations qu'il fait, il ne doit pas beaucoup aimer certains caractères UTF-8.

Je suggérerais bien de passer par un shapefile intermédiaire en manipulant avec les options SHAPE_ENCODING du driver shapefile mais ça me parait un peu compliqué.

Le plus simple est probablement d'injecter dans postgres, quitte à ce que ça soit dans une table intermédiaire, avec PGCLIENTENCODING et ensuite faire les manips avec lui.

Hors ligne

 

#8 Fri 17 August 2012 15:56

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

Re: [GDAL 1.9] Problème avec les caractères accentués dans ogr2ogr -sql

Zut, bon ben je vais me faire une table temporaire et un mappage des champs.


Jérôme

Hors ligne

 

Pied de page des forums

Powered by FluxBB