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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 10 October 2017 18:09

Kili444
Juste Inscrit !
Date d'inscription: 10 Oct 2017
Messages: 8

QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Bonjour,

Je suis tout nouveau en matière de SIG et sur ce forum. J'ai plusieurs problèmes qui se posent à moi sur QGIS.

J'ai plusieurs champs de la Bd topo qui m'intéresse pour des libellés de route: nom_de_voie_g ; nom_de_voie_d; numero; inseecom_g ; inseecom_d

Tout cela dans le but d'obtenir un nouveau champs "libellé" suivant plusieurs règle de formatage.

A savoir:

Quand j'ai les champs "nom_de_voie_g ; nom_de_voie_d" de remplis mon champs final doit reprendre le style suivant: "nom_de_voie_g"_"inseecom_g"     (le nom de la voie Under score le code insee)

Quand j'ai seulement le champs " nom_de_voie_d" de remplis je veux le même résultat mais avec: "nom_de_voie_d"_"inseecom_d"

et quand je n'ai ni "nom_de_voie_g" ni "nom_de_voie_d" de remplis je veux que mon champs final prenne le champs "numeros"_"Insee"

Je n'arrive à rien avec la calculatrice de champs, je ne voit absolument pas comment utiliser la fonction "if" pour faire des "si".

Votre aide me serez du plus grand bien

Je veux en faire créer un nouveau champs suivant les valeurs d'autres champs.

Bonne journée, Merci d'avance

Hors ligne

 

#2 Tue 10 October 2017 20:52

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Salut,

les ifs dans la calculatrice de champ s'utilise comme une fonction :

Code:

if(condition, 
   valeurSiVrai, 
   valeurSiFaux)

On peut imbriquer les ifs comme suit

Code:

if(condition1, 
   if(condition2, 
         valeurSiCond2Vrai, 
         valeurSiCond2Faux), 
   valeurSiCond1faux)

Cela equivaut en pseudo code :

Code:

SI condition1 ALORS
   SI condition2 ALORS
        valeur1siCond2Vrai
   SINON
        valeur2siCond2Faux
   FIN SI
SINON
   valeurSiCond1Faux
FIN SI

Vous avez aussi la structure de contrôle CASE :

Code:

CASE
WHEN condition1 THEN valeur1
WHEN condition2 THEN valeur2
CASE ELSE valeurElse
END

Vous avez aussi la fonction coalesce qui renverra la premiere  valeur non-nulle d'une liste d'argument

Code:

coalsece(valeur1Nulle, valeur2Nulle, valeur3NonNulle, valeur4NonNulle, valeur5Nulle)

Cet exemple renverra valeur3NonNulle.

Dernière modification par tumasgiu (Tue 10 October 2017 20:52)

Hors ligne

 

#3 Wed 11 October 2017 09:13

Kili444
Juste Inscrit !
Date d'inscription: 10 Oct 2017
Messages: 8

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Bonjour je n'arrive même pas à créer un nouveau champ et le renseigner avec 0 ou 1 suivant si un autre champ contient des valeurs ou non.

If("mon_champ" IS NULL,
'1',
'0')

Il m'affiche systématiquement pour toutes les valeurs 0, à savoir systématiquement la valeur sifaux.

Dernière modification par Kili444 (Wed 11 October 2017 09:13)

Hors ligne

 

#4 Wed 11 October 2017 15:14

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Bonjour,

Il s'agit deux deux conditions IF imbriquées, ce code devrait marcher :

Code:

if("nom_de_voie_g" is null AND "nom_de_voie_d" is null, 
if("nom_de_voie_g" is not null AND "nom_de_voie_d" is not null,"nom_de_voie_g" || "_"  || "inseecom_g", "nom_de_voie_d" || "_"  || "inseecom_d"),
"numeros"  || "_"  ||"Insee")

++

Dernière modification par Xavier Julian (Wed 11 October 2017 15:15)

Hors ligne

 

#5 Wed 11 October 2017 15:47

Kili444
Juste Inscrit !
Date d'inscription: 10 Oct 2017
Messages: 8

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Ok je pense voir plus ou moins l'idée.

Et pour simplement faire un nouveau avec 0 ou 1 pour savoir s'il y a des données ou non dans un autre champs. pourquoi faire tous simplement cela ne marche pas ???

If("mon_champ" IS NULL,
'1',
'0')

Merci d'avance

Hors ligne

 

#6 Wed 11 October 2017 15:53

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Cela devrait pourtant marcher.
"mon_champ" est-il vraiment remplit ?

Hors ligne

 

#7 Wed 11 October 2017 16:18

Kili444
Juste Inscrit !
Date d'inscription: 10 Oct 2017
Messages: 8

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Autant pour mo

If("mon_champ" IS NULL,
'1',
'0')

Pour cette simple requête ça fonctionne

Hors ligne

 

#8 Thu 12 October 2017 08:33

Kili444
Juste Inscrit !
Date d'inscription: 10 Oct 2017
Messages: 8

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Maintenant je voudrais "concaténer" (je ne sais pas si c'est le bon terme) 2 champs.

Ex: dans un champ "libellé" je veux que le résultat soit le regroupement de 2 champs

"champ1"_"champ2"

Je ne suis pas sur de la syntaxe exacte à adopter, à moins d'utiliser la fonction "concatenate" de la calculatrice de champ ???

Pouvez-vous m'aider ?

Cordialement

Hors ligne

 

#9 Thu 12 October 2017 09:13

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Bonjour,

Le code que je vous ai donné en #4 est complet, l'avais vous au moins essayé ??
Le signe || remplace la fonction concat.

Hors ligne

 

#10 Thu 12 October 2017 09:19

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

http://lmgtfy.com/?q=concatenate+qgis+field+calculator

trois façons :

l'opérateur || : chaine1 || '_' || chaine2

l'opérateur + (dispo à partir de QGIS 2.6) : chaine1 + '_' + chaine2

la fonction concatenate : concatenate(chaine1, '_', chaine2)

Hors ligne

 

#11 Thu 12 October 2017 09:34

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

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Bonjour,

tumasgiu a écrit:

la fonction concatenate : concatenate(chaine1, '_', chaine2)


la fonction concat plutôt, non? concatenate étant utilisée dans la logique des fonctions aggregate (itération sur toutes les entités).
A noter que || renverra systématiquement null si une des entrées est null alors que concat renverra le reste. a voir selon ce que vous souhaitez

Hors ligne

 

#12 Thu 12 October 2017 10:01

Kili444
Juste Inscrit !
Date d'inscription: 10 Oct 2017
Messages: 8

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Merci je vais tester tout cela

Hors ligne

 

#13 Thu 12 October 2017 10:24

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si

Santanna a écrit:

Bonjour,

    tumasgiu a écrit:

    la fonction concatenate : concatenate(chaine1, '_', chaine2)

la fonction concat plutôt, non? concatenate étant utilisée dans la logique des fonctions aggregate (itération sur toutes les entités).
A noter que || renverra systématiquement null si une des entrées est null alors que concat renverra le reste. a voir selon ce que vous souhaitez


Exact, j'ai tapé un peu vite comme à mon habitude.

Important également de mettre en avant le caractère absorbant de la valeur null quand on utilise certaines opérations
(on peut utiliser coalesce pour contourner ce "problème")

Dernière modification par tumasgiu (Thu 12 October 2017 10:56)

Hors ligne

 

Pied de page des forums

Powered by FluxBB