Comment symboliser des entités avec des valeurs NULL en symbologie graduée?

15

J'ai un jeu de données d'entités surfaciques et un attribut d'une table différente que je joins (un à un) dans QGIS afin de symboliser les attributs comme une carte choroplèth. Cependant, tous les champs de polygone n'ont pas de champ correspondant dans le tableau des attributs numériques, il existe donc des valeurs nulles lors de la production de la symbologie graduée.

D'après mes recherches, le conseil le plus courant dans cette situation consiste à inclure une copie de l'ensemble de données polygonal (ou un autre arrière-plan) qui définit une symbologie par défaut. Cela fonctionne parce que les valeurs nulles ne sont pas classées dans la symbologie graduée, donc on peut voir "en dessous". J'ai joint une image d'exactement cela. Les entités gris foncé n'existent pas dans la table de jointure ( mb_percentile_isochrones_all), mais existent dans la table des polygones de limite ( mb2013_wgtn). J'ai donc besoin de deux instances de la mb2013_wgtntable afin d'afficher les fonctionnalités "pas de données".

entrez la description de l'image ici

Cependant, cela ne me semble pas élégant. Il serait beaucoup plus intuitif de définir un symbole de valeur nulle. Peut-être que cela pourrait être parfaitement transparent pour être cohérent avec ce qui existe actuellement, ou peut-être que ce serait une sorte de gris coupé - tout ce que l'utilisateur souhaite. Le fait est qu'à l'heure actuelle, il faut deux couches différentes dans le contenu pour gérer la symbologie des valeurs nulles. Cela signifie que pour modifier la symbologie de toutes vos entités en même temps (par exemple, si vous souhaitez augmenter la largeur de toutes les bordures), cela doit être géré deux fois: une fois dans les propriétés de l'entité avec la symbologie graduée, et une fois pour le calque "d'arrière-plan" qui gère le symbole nul.

Est-il possible de définir un symbole de valeur "nul" sans utiliser une "copie" de la même couche utilisée pour la symbologie graduée, dans QGIS (2.6.1)?

alphabetasoup
la source
Quel est le problème d'avoir deux fois la même couche avec une symbologie différente? Utilisez peut-être le filtrage d'attributs afin qu'aucun polygone n'apparaisse dans les deux couches si vous rencontrez une confusion dans l'identification ou le géotraitement. Les entités inégalées sont-elles «nulles» dans leur valeur de jointure ou ont-elles une valeur qui n'apparaît pas dans le tableau?
Michael Stimson
1
1. Problème: si je veux contrôler les propriétés communes des entités avec une valeur et une valeur nulle (par exemple la couleur de la bordure), cela doit être effectué deux fois. Cela rend beaucoup plus facile d'oublier de changer l'un d'eux, ou de faire une légère erreur (par exemple une mauvaise nuance de gris pour le contour). 2. Aucun problème concernant la confusion pour le géotraitement, juste la symbologie: je veux symboliser l' nullentité dans la même couche. 3. Les fonctionnalités inégalées sont nulldans leur valeur de jointure (comme indiqué dans la table d'attributs QGIS après la jointure).
alphabetasoup
Il est également plus difficile lors de la création d'une légende d'inclure un échantillon "sans données", car ce symbole proviendrait d'une couche différente.
alphabetasoup
2
Tu as raison. Il n'y a nulle part où sélectionner «afficher les fonctionnalités NULL comme celle-ci» dans la boîte de dialogue des symboles gradués, les lignes avec des valeurs NULL ne sont tout simplement pas affichées.
Michael Stimson

Réponses:

17

Comme @ MichaelMiles-Stimson l'a déjà mentionné, il ne semble pas y avoir de moyen de symboliser les fonctionnalités NULL . Cependant, il existe une alternative par laquelle vous créez un filtre pour forcer QGIS à traiter les valeurs NULL comme un entier tel que 0. J'ai inclus un exemple où j'ai créé 3 polygones simples chacun avec une certaine valeur:

3 polygones

Table d'attributs

Voici la Symbologie Graduée que j'ai utilisée avec la commande suivante:

case when "Some_Value" IS NULL then 0 else "Some_Value" end

Symbologie graduée

J'espère que cela t'aides!

Joseph
la source
C'est très utile et je vais probablement mettre cela en pratique. Le problème que j'anticipe est que 0 est une valeur significative dans mon ensemble de données. Je pourrais probablement utiliser -1 ou quelque chose. Mais dans les deux cas, cela rendrait l'identification automatique des interruptions de classe un peu compliquée. Je devrais peut-être soumettre une demande de fonctionnalité pour cela étant donné qu'il est maintenant clair que les solutions de contournement sont loin d'être idéales.
alphabetasoup
Oui, l'inclusion de NULLvaleurs pourrait être très utile. Ce n'est pas une bonne solution de contournement, mais vous pouvez toujours soumettre une demande de fonctionnalité et espérons qu'elle deviendra disponible dans la prochaine version :)
Joseph
6

Je sais qu'il a été répondu, mais juste pour donner une autre option:

Vous pouvez simplement laisser le champ sans filtre ni valeur (je sais que cela fonctionne pour CATEGORIZED ou RULE BASED):

http://docs.qgis.org/2.0/uk/docs/training_manual/vector_classification/classification.html

entrez la description de l'image ici

J'utilise QGIS 2.10 et cela fonctionne.

Marcos Saito
la source
Toujours agréable de connaître plus de méthodes pour résoudre ou contourner un problème! +1
Joseph
1
Encourageant de voir cette amélioration depuis la 2.6, non? Pouvez-vous confirmer que cela fonctionne lorsque les valeurs nulles proviennent d'une table jointe?
alphabetasoup le
1
Quelques notes à ce sujet. La symbologie vide ou NULL dans une symbologie basée sur des règles sera appliquée à TOUTES les fonctionnalités. Les règles sont appliquées de haut en bas, il peut donc être superposé par une autre règle, mais le NULL sera également là. Important s'il s'agit d'une forte symbologie. Vous pouvez également "générer" vos règles en les créant d'abord dans la symbologie catégorisée ou graduée, puis en passant à Rule Based /
HeikkiVesanto
@Vesanto, je ne sais pas si je l'ai eu, ou si c'est un problème. Dans mon cas, j'ajoute des valeurs Z à un SHP fait de lignes de contour, qui à l'origine n'avait pas de valeurs Z (Z = NULL). J'ai défini les fonctionnalités avec des valeurs NULL sur rouge et celles avec n'importe quelle valeur sur noir. Lors de l'édition, dès que j'ai défini une valeur Z, la fonction (la ligne de contour) passe du rouge au noir, de cette façon je connais celles pour lesquelles je n'ai pas encore défini la valeur Z.
Marcos Saito
@Marcos, ce ne sera pas un problème dans votre cas. Mais disons que la ligne était rouge pour commencer, et vous vouliez la rendre invisible une fois qu'elle n'était plus nulle. Ça ne marcherait pas.
HeikkiVesanto
4

Semblable à ce que d'autres utilisateurs ont dit, la meilleure option est d'utiliser des symboles basés sur des règles. Pour éviter de créer manuellement les règles:

  1. Changez le type de symbole en Gradué .
  2. Définissez la colonne de symboles, les couleurs, les intervalles, etc. comme d'habitude Symboles gradués, avec des valeurs nulles non affichées
  3. Modifiez le type de symbole de Gradué à Basé sur des règles . Les symboles définis à l'étape précédente seront reportés. Cliquez sur le bouton Ajouter un symbole et sélectionnez AUTRE . Modifiez le style comme il convient. Cette classe de symboles ELSE capturera toutes les valeurs qui n'ont pas déjà été symbolisées, y compris les valeurs nulles. Ajout du symbole fourre-tout ELSE
  4. Cliquez sur OK. Les valeurs nulles seront désormais symbolisées. Symboles gradués, y compris les valeurs nulles

(Testé dans QGIS 3.6.0)

Jesse Reilly
la source
simple et utile. Merci. Je suggérerais que QGIS devrait avoir une option d'exclusion des valeurs pour la classification graduée. J'ai rencontré une certaine confusion en essayant de classer avec des valeurs de nodata marquées -1, -999 ... etc. (en utilisant QGIS 3.14 LTR). Heureusement, QGIS ignore automatiquement les valeurs nulles au moins lors de la symbologie graduée.
Iván Santiago