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

GEODATA DAYS 2024

#1 Wed 05 May 2021 12:58

zutix
Participant actif
Date d'inscription: 19 Mar 2020
Messages: 87

QGIS 2.18: Charger une couche "csv" - sans x,y - en python 2

Bonjour

Que faut-il écrire en python 2 pour faire l’équivalent du chargement manuel suivant ?

Clic sur l’icône (apostrophe) qui permet d’ajouter une couche de texte délimité (csv)  puis choix des paramètres suivants :
  Nom fichier : D:/QGIS/PROJETS/TEST/TestFic.csv
  Nom couche : Test                      Codage : UTF-8
  √ Délimiteurs personnalisés  ( √ Tab et √ Point-virgule)
  Enregistrements  (Nb lignes à ignorer : 0 et √ en-têtes en 1ère ligne)
  Options des champs ( )         ( ) signifie : aucune sélection
  Définition de la géométrie (√ Pas de géométrie)
  Paramètres de la couche ( )

Le code suivant dans la console python ne charge pas la couche, probablement parce qu’il manque l'information : pas de géométrie (point est sélectionné par défaut).
  uri = "file:///D:/QGIS/PROJETS/TEST/TestFic.csv?delimiter=%s" % (";")
  layer = QgsVectorLayer(uri, "Test", "delimitedtext")


D'avance merci, Cordialement

Hors ligne

 

#2 Thu 06 May 2021 22:53

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 2.18: Charger une couche "csv" - sans x,y - en python 2

Bonjour,

si vous ne renseignez pas le xField et le yField par défaut il ne prend pas de géométrie.

le code n'ajoute pas la couche à la liste de couche sans :

Code:

QgsMapLayerRegistry.instance().addMapLayer(layer)

Que renvoit :

Code:

layer.isValid()

Hors ligne

 

#3 Wed 19 May 2021 07:52

zutix
Participant actif
Date d'inscription: 19 Mar 2020
Messages: 87

Re: QGIS 2.18: Charger une couche "csv" - sans x,y - en python 2

Bonjour et merci pour la réponse JD.

1- le code suivant dans la console python se déroule sans erreur :
    uri = "file:///D:/QGIS/PROJETS/TEST/TestFic.csv?delimiter=%s" % (";")
    layer = QgsVectorLayer(uri, "Test", "delimitedtext")
    QgsMapLayerRegistry.instance().addMapLayer(layer)
    layer.isValid()

mais
2-  layer.isValid()  renvoie  False  et aucune couche ne se charge.

(La couche texte venant du csv que je voudrais charger en python  se charge sans difficulté à la main avec la procédure décrite ci-avant)

Problème difficile non encore résolu.

Hors ligne

 

#4 Wed 19 May 2021 09:55

zutix
Participant actif
Date d'inscription: 19 Mar 2020
Messages: 87

Re: QGIS 2.18: Charger une couche "csv" - sans x,y - en python 2

En cherchant à comprendre et en fouillant,
dans les propriétés de la couche, onglet Général, la source de la couche voulue - créée à la main - est :
file:///D:/QGIS/PROJETS/TEST/TestFic.csv?type=csv&delimiter=5Ct;&geomType=none&subsetIndex=no&watchFile=no

En l’affectant à uri puis en effectuant les opérations ci-dessus, cela charge une couche Test mais les séparateurs sont mal placés et la table n’est donc pas celle attendue. D’où l’idée d’écrire :
uri="file:///D:/QGIS/PROJETS/TEST/TestFic.csv?type=csv&delimiter=%s;&geomType=none&subsetIndex=no&watchFile=no" % (";")

Conclusion : voilà ce qui crée une couche Test constituée d’une table conforme au fichier TestFic.csv  :
uri="file:///D:/QGIS/PROJETS/TEST/TestFic.csv?type=csv&delimiter=%s;&geomType=none&subsetIndex=no&watchFile=no" % (";")
layer = QgsVectorLayer(uri, "Test", "delimitedtext")
QgsMapLayerRegistry.instance().addMapLayer(layer)


Merci de l'aide et bonne journée

Hors ligne

 

Pied de page des forums

Powered by FluxBB