Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Thu 17 April 2014 09:42

Marion Bévillon
Juste Inscrit !
Date d'inscription: 17 Apr 2014
Messages: 3

QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Bonjour,

Je suis débutante sur QGis et j'enchaine petit bug sur petit bug. Mais là, il y en a que je n'arrive pas à débloquer.
J'utilise la version 2.2.0-Valmiera de QGis sur Windows 7.

Je souhaite cartographier les surfaces de certaines cultures en fonction des régions agricoles mais comme certaines données sont confidentielles, j'ai des cases vides dans mon jeu de données (et je souhaite faire apparaitre ces données confidentielles sur mes cartes, dans le sens où je souhaite identifier les endroits où je n'ai pas eu accès aux informations). Lorsque je charge mon jeu de données et que je regarde les propriétés de ma table d'attributs, les données qui se trouvent dans une colonne ayant au moins une case vide ne sont pas reconnues comme des nombres mais comme du texte. Alors que pour le même jeu de données, les données se trouvant dans une colonne sans case vide sont bien reconnues comme des nombres. Pour les colonnes ayant des cases vides, je ne peux donc pas faire une légende en mode "gradué" comme il ne reconnait pas de valeurs numériques.


J'ai trouvé une méthode (longue) et une autre méthode pas très propre pour résoudre provisoirement le problème mais je souhaiterais savoir s'il existe une option sur QGis qui permet de gérer correctement les cases vides afin que toutes mes données soient reconnues comme des nombres lorsque c'est le cas.


Les 2 méthodes provisoires testées sont :
- lorsque je suis en mode édition sur ma table d'attributs, je reprends une à une les colonnes ayant des cases vides pour les convertir en nombre (grâce à la calculatrice de champ), sauf qu'au total, avec toutes les cartes que j'aurais à faire, j'aurais au moins une trentaine de colonnes à modifier...

- l'autre technique, je remplace dans mon fichier excel toutes les cases vides par des valeurs très largement supérieures à mes "vraies" valeurs. Ainsi, au moment de passer à la cartographie, je crée une classe supplémentaire qui contient seulement ces valeurs et je sais que cette classe correspond en fait à mes données confidentielles. Mais bon, cette méthode est quand même potentiellement source d'erreur...
Par exemple, lorsque j'utilise des pourcentages, mes données sont bornées entre 0 et 100. Je remplace donc les cases vides par 200 et pour la carto, je crée une classe ]100 - 200]. Et je sais que cette classe correspond en fait à l'absence de données pour la légende.

J'espère avoir été à peu près claire.
Merci d'avance pour vos réponses.

Marion.

Hors ligne

 

#2 Thu 17 April 2014 10:15

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Bonjour,

faire l'affichage gradué sur l'expression "COALESCE(votre_champ,1000)" devrait faire l'affaire.

Cette fonction renvoie la première valeur non nulle de chacun des paramètres. Donc si la colonne "votre champ" est renseignée, c'est sa valeur qui sera classée, sinon ce sera la valeur 1000.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Thu 17 April 2014 10:20

chanteclair
Participant assidu
Lieu: Pau
Date d'inscription: 3 Jan 2007
Messages: 717

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Bonjour,
Si vos couches sont issues de jointure avec un fichier excel/dbf, effectivement, Qgis interprète le contenu de la 1ère case pour donner un type à la colonne.
Si la 1ère case est vide, votre champ sera de type String, si elle contient un chiffre, elle sera en entier ou réel.
Soit vous refaites vos jointures avec des colonnes remplies au préalable, soit vous utilisez effectivement la calculatrice de champ pour les convertir en entier ou réel avec les fonctions de conversion.
Peut-être d'autres personnes ont-elles d'autres solutions ?
Bonne journée.

Hors ligne

 

#4 Thu 17 April 2014 10:54

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Bonjour,
Bienvenue, Marion!!!

Juste pour bien comprendre

Lorsque je charge mon jeu de données et que je regarde les propriétés de ma table d'attributs, les données qui se trouvent dans une colonne ayant au moins une case vide ne sont pas reconnues comme des nombres mais comme du texte. Alors que pour le même jeu de données, les données se trouvant dans une colonne sans case vide sont bien reconnues comme des nombres.


Les données sont dans une feuille Excel ou sont en dur dans les tables attributaires des couches sig?
Est-à dire aussi que :
- les champs sous Excel sont présentés comme des nombres et après jointure (?) sont traités comme du texte? Dans les propriétés de la couche, onglet Champs, ils sont affichés en texte (varchar) ou en nombre? Il y a sur le forum des discussions là-dessus et notamment des options pour passer par du csvt ou autre
- ces champs ne sont pas proposés dans l'onglet Style pour faire la classification? Ou lorsque vous utilisez ces champs pour la classification, les données réputées NULL n'apparaissent pas?

Parce que sinon, il n'y a, à ma connaissance rien à faire pour avoir un champ nombre qui contienne des valeurs NULL. Par contre, lors d'une classification, ces valeurs disparaissent. Et Dans un tel cas, les règles sont votre ami smile. Il va falloir filtrer la colonne entre :
- les entités qui ont une valeur non nulle et sur lesquelles on fera la classification;
- et les entités à valeur nulle auxquelles on attribuera un symbole particulier.

La Procédure:
Dans Propriétés de la Couche > Style , Choisir Ensemble de règles.
Double clic sur la première ligne et dans la fenêtre qui s'ouvre, saisir dans Filtre "monchamp" is not null. Décocher le symbole, Valider.
Sélectionner à nouveau cette ligne et, en bas de la fenêtre, choisir "Ajouter les intervalles aux règles", faire la classification sur la même colonne comme d'hab et valider.
Clic sur le bouton + pour ajouter une nouvelle règle et là, dans Filtre saisir "monchamp" is null. choisir le style voulu et valider.
En principe, toutes les entités de la couche devraient alors apparaître, soit dans le mode classifié, soit comme symbole unique.

Dernière modification par SANTANNA (Thu 17 April 2014 10:55)

Hors ligne

 

#5 Thu 17 April 2014 11:43

Marion Bévillon
Juste Inscrit !
Date d'inscription: 17 Apr 2014
Messages: 3

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Tout d'abord, merci beaucoup pour vos réponses!!

Pour répondre à Chanteclair :

Si la 1ère case est vide, votre champ sera de type String, si elle contient un chiffre, elle sera en entier ou réel.


Si j'ai bien compris ce que vous dites, il ne faut pas que la première valeur de ma colonne soit une case vide (et seulement la première?). Or, peu importe l'emplacement de la case vide (dans les données que j'ai testé pour le moment, la case vide se trouve en plein milieu de la colonne), QGis reconnaitra toutes les données de la colonne comme du texte.
Par exemple, si j'ai quelque chose dans le genre (tableau ci-dessous), toutes les données seront sous forme de texte :
Nom de colonne
Valeur 1
Valeur 2
case vide
Valeur 3



Et pour répondre à Santanna :

les champs sous Excel sont présentés comme des nombres et après jointure (?) sont traités comme du texte? Dans les propriétés de la couche, onglet Champs, ils sont affichés en texte (varchar) ou en nombre? Il y a sur le forum des discussions là-dessus et notamment des options pour passer par du csvt ou autre


Les champs sous excel sont présentés comme des nombres et j'ai testé sous excel les deux types de séparateurs décimaux (virgule ou point) en pensant que ça pouvait aussi venir de là, rien ne change. Dès que je charge le fichier excel sous QGis (avant même de faire une jointure), les données sont reconnues comme du texte (si présence de case vide dans la colonne...).
Et lorsque je vais dans l'onglet Propriétés --> Champs, les données sont affichées comme étant de type "String" et non pas "Real".


- ces champs ne sont pas proposés dans l'onglet Style pour faire la classification? Ou lorsque vous utilisez ces champs pour la classification, les données réputées NULL n'apparaissent pas?


Et du coup, effectivement, les colonnes ayant au moins une case vide ne sont pas disponibles dans l'onglet Style quand je veux faire une classification Graduée. Par contre, je peux faire une classification Catégorisée (mais ça n'a aucun sens car je me retrouve évidemment avec autant de classes que de valeurs différentes...)

A quoi correspond le format csvt? Il faudrait que j'importe mon jeu de données sous ce format plutôt que sous le format .xls?

J'ai testé votre méthode en passant par l'Ensemble de règles, mais pour faire cette technique, il faut que mes données soient reconnues comme des valeurs?! Sinon, je serais encore bloquée pour faire la classification des valeurs non NULL. Par contre, quand j'aurais réglé le problème des valeurs qui sont reconnues en texte, je retiens cette méthode!!

Pour le moment, j'utilise donc ma méthode de remplacer les cases vides par des valeurs bien supérieures au vraies données et créer une classe supplémentaires. Ca marche mais je crains de faire une erreur à la longue...

Hors ligne

 

#6 Thu 17 April 2014 13:11

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Je viens d'essayer d'ajouter des données d'une table Excel à un projet QGIS 2.2. Ajouter une couche vecteur > monfichier.xls, valider. Dans ma liste de couches apparaît une table monfichier.csv. Et le type des champs correspond parfaitement à celui attribué sous Excel, dans toutes les situations testées:
- que du nombre dans le champ> Real sous QGIS
- nombre avec quelques champs vides > Real sous QGIS
- nombre avec première valeur du champ vide > Real sous QGIS
- nombre puis texte dans une ligne > le champ devient String sous QGIS.
Il y avait un "problème" sur la récupération du type de champ (lié aux spécifications OGR, je crois) à l'ouverture des fichiers Excel ou csv mais si je m'en tiens à mon expérimentation, il semble que ce soit résolu. ou en tout cas, je n'arrive plus à reproduire le problème.
Ma question serait donc : vos champs vides sont-ils vraiment vides? Pas d'espace oublié par hasard, d'apostrophe qui y traînerait?

A quoi correspond le format csvt? Il faudrait que j'importe mon jeu de données sous ce format plutôt que sous le format .xls?


De ce que j'en ai compris, le csvt est un fichier en-tête qui accompagne le csv (du même nom rangé à côté) pour dire ici à QGIS, quel type de format il doit appliquer à chaque champ. Je n'ai pas réussi à trouver s'il marchait avec xls donc oui, ça veut dire qu'il vous faut enregistrer votre table de données en csv. Vous pouvez faire ça directement depuis QGIS (sauvegarder votre table sous > format "vakleurs séparées par une virgule et dans "plus d'options", choisir yes pour create_csvt).
ce fichier csvt s'ouvre avec un simple éditeur de texte et liste dans l'ordre des champs du csv, le type de chaque champ. Il suffit alors de modifier la valeur "String" par "Real" pour les champs à problème.

Ça c'était pour répondre à vos questions.

Pour le moment, j'utilise donc ma méthode de remplacer les cases vides par des valeurs bien supérieures au vraies données et créer une classe supplémentaires. Ca marche mais je crains de faire une erreur à la longue...


Un gros risque en effet!!! et à ce propos, si vos cases vides sont bien vides, la méthode suggérée par Mathieu est plus clean. Je la réadapte, compte tenu des nouvelles infos. Il s'agit de faire le style gradué avec une expression.
En face de la case colonne, cliquez sur l'Epsilon et saisir coalesce(toreal("monchamp"),1000).
Plus besoin d'utiliser des règles d'ailleurs...

Dernière modification par SANTANNA (Thu 17 April 2014 13:25)

Hors ligne

 

#7 Thu 17 April 2014 13:18

chanteclair
Participant assidu
Lieu: Pau
Date d'inscription: 3 Jan 2007
Messages: 717

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Si j'ai bien compris ce que vous dites, il ne faut pas que la première valeur de ma colonne soit une case vide (et seulement la première?). Or, peu importe l'emplacement de la case vide (dans les données que j'ai testé pour le moment, la case vide se trouve en plein milieu de la colonne), QGis reconnaitra toutes les données de la colonne comme du texte.
Par exemple, si j'ai quelque chose dans le genre (tableau ci-dessous), toutes les données seront sous forme de texte :
Nom de colonne
Valeur 1
Valeur 2
case vide
Valeur 3


Oui c'est ce que j'ai constaté après avoir rencontré les mêmes problèmes que vous. Si la première case sous l'entête de votre colonne contient une valeur numérique (avec en format de cellule un type numérique), peu importe si les cases en dessous sont vides, le type sera reconnu en integer ou real. Par contre si cette 1ere case est vide et celles du dessous remplies, Qgis l'associera à du texte.

Dernière modification par chanteclair (Thu 17 April 2014 15:18)

Hors ligne

 

#8 Thu 17 April 2014 15:10

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

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Bonjour,

Généralement on va utiliser une valeur aberrante mais plutôt -9999 au lieu de 1000 mais c'est un détail wink

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 Thu 24 April 2014 14:54

Marion Bévillon
Juste Inscrit !
Date d'inscription: 17 Apr 2014
Messages: 3

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Ma question serait donc : vos champs vides sont-ils vraiment vides? Pas d'espace oublié par hasard, d'apostrophe qui y traînerait?


Effectivement, je pense qu'en convertissant mes fichiers .xlsx en .xls, il s'est passé un "truc" avec les cases vides. Les cases sont effectivement vides (j'ai vérifiée qu'il n'y ait pas d'espace) mais lorsque j'essaye par exemple, directement dans excel, de faire des formules avec la condition "estvide", la formule ne marche pas. Elle est fonctionnelle seulement si j'efface la case qui est déjà supposée vide (j'espère être claire...?!). Et je ne sais pas comment régler ce problème mais ça, c'est hors sujet par rapport à ce post!

En face de la case colonne, cliquez sur l'Epsilon et saisir coalesce(toreal("monchamp"),1000).


Je ne suis pas sure de comprendre cette technique... A quoi correspond le chiffre 1000?

Généralement on va utiliser une valeur aberrante mais plutôt -9999 au lieu de 1000 mais c'est un détail


Oui, c'est effectivement ce que j'utilise, c'est plus facilement repérable dans mes données qui sont bornées entre 0 et 100.
Et j'ai réussi à faire pas mal de cartes avec cette méthode en attendant de réussir à débugger vraiment mon histoire de cases vides.


Merci encore pour tous ces conseils en tout cas!

Hors ligne

 

#10 Thu 24 April 2014 17:49

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS 2.2.0 Valmiera (Win 7) : Gestion des cases vides

Bonjour,

Marion Bévillon a écrit:

En face de la case colonne, cliquez sur l'Epsilon et saisir coalesce(toreal("monchamp"),1000).


Je ne suis pas sure de comprendre cette technique... A quoi correspond le chiffre 1000?

Généralement on va utiliser une valeur aberrante mais plutôt -9999 au lieu de 1000 mais c'est un détail


Oui, c'est effectivement ce que j'utilise


La formule coalesce(toreal("monchamp"),1000) lui demande de faire la classification sur le champ "monchamp" (converti en nombre réel) et lorsque ce champ est vide (null), de choisir comme valeur pour cette entité 1000. (voire -9999 comme le précise Yves). Il ne resterait alors plus qu'à attribuer une classe particulière à cette unique valeur.

Hors ligne

 

Pied de page des forums

Powered by FluxBB