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 Sat 27 January 2018 11:35

LLJ
Juste Inscrit !
Date d'inscription: 22 Jan 2018
Messages: 3

QGIS: "recherche matricielle" (à la Excel) dans une autre couche ?

Bonjour, j'ai cherché pendant deux jours en français et en anglais une réponse à ma question mais je ne dois pas trouver les bons mots ... bref je suis débutant dans les expressions de calcul de champs (Python, expression ...).

Voici ce que je cherche à faire : j'ai un .shp dans lequel il y a un champ où j'aimerais calculer un attribut existant dans une table séparée (.csv importé) en rentrant le n° de colonne (champ) et le n°de ligne (id).

Sauf que le numéro de colonne est une variable dans un autre champ de ce .shp ( heure( now()) en champ virtuel ) et que le n° de ligne est également le numéro de ligne du .shp.

En gros ça donnerait quelque chose comme : fonctionX( [nom de la table .csv] , [champ "Heure" du .shp (qui varie en continu) recherché dans les colonnes de la table .csv] , [id du .shp, recherché dans les id du .csv])

Le csv contient en effet 24 colonnes donnant un scénario différent pour chaque n° d'entité (id) à chaque heure. L'objectif étant que le scénario programmé par heure et par id dans le .csv se présente dans le .shp, adapté chaque instant à l'heure présente.

Je suis vraiment débutant dans ce genre de formule (et dans les forums de SIG aussi d'ailleurs, j'espère ne pas poser une question déjà abordée !!), j'en ai appris énormément en recherchant pendant tout ce temps mais je n'ai jamais trouvé quelque chose qui me semble se rapprocher de ça, mais j'ai peut-être mal compris !

Est-ce que quelqu'un aurait une idée ?

Hors ligne

 

#2 Mon 29 January 2018 12:23

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

Re: QGIS: "recherche matricielle" (à la Excel) dans une autre couche ?

Bonjour,
J'ignore si j'ai bien compris le besoin mais si tel n'est pas le cas, une image valant souvent mille mots, un extrait des données pourrait grandement aider.
De ce que j'en ai compris, vous avez:
- une couche shp avec pour colonnes, "id" et "scenario"
- une table csv avec pour colonne, "id", "0", "1", "2".... "23", chaque colonne heure contenant l'information à rapatrier dans le champ "scenario" du shp.
Ai-je juste? A noter que l'écriture du nom de champ heure est primordiale pour le succès de la formule. Donc on éditera le champ scenario comme suit:

Code:

attribute( getfeature( 'monfichiercsv', 'id', attribute( $currentfeature, 'id' ) ), tostring( hour( $now ) ) )

Pour explication:`
attribute($currentfeature, 'id') récupère l'id de la ligne en cours de traitement (celle que QGIS s'apprête à remplir) dans le fichier shape
getfeature(couche, champ, valeur) récupère du fichier csv la ligne dont le champ "id" contient la même valeur que le champ "id" de l'objet shp actuellement traité
tostring(hour($now)) assure que la seconde variable de la fonction attribute est de type texte car ce doit être un nom de champ, et changera au fil du temps.

Pour finir, je ne l'ai pas testée mais je pense que ce devrait marcher.

Dernière modification par SANTANNA (Mon 29 January 2018 12:24)

Hors ligne

 

#3 Mon 29 January 2018 17:08

LLJ
Juste Inscrit !
Date d'inscription: 22 Jan 2018
Messages: 3

Re: QGIS: "recherche matricielle" (à la Excel) dans une autre couche ?

Merci beaucoup pour votre réponse !
Oui vous avez parfaitement compris, et effectivement votre façon de l'exposer est bien plus claire que la mienne !
Je n'ai pas eu le temps pour l'instant d'essayer mais je vais le faire rapidement et je ferai un retour précis dès que ce sera fait.
Merci encore et bonne soirée.

Hors ligne

 

#4 Tue 30 January 2018 11:58

LLJ
Juste Inscrit !
Date d'inscription: 22 Jan 2018
Messages: 3

Re: QGIS: "recherche matricielle" (à la Excel) dans une autre couche ?

Bonjour, je suis en train de tester tout ça et ça semble bien fonctionner !

Voici ce que j'ai tapé : attribute( getfeature( 'Classeur1', 'id', attribute( $currentfeature, 'id' ) ), tostring( '_'  ||  Minute( $now ) ) )
Minute, c'est pour voir évoluer la chose rapidement, et '_' c'est parce que quand j'importe un csv dans Qgis, si je ne fais rien les noms de colonnes passent de 1; 2; 3; ... à 1_1; 2_1; 3_1 .... Donc j'ai pris le parti de rajouter un '_' avant, c'est arbitraire.

Cependant j'ai remarqué quelque chose de curieux : je suis allé dans les styles de couches pour
1. faire évoluer la symbologie en fonction de du programme
2. afficher le programme en étiquette

Et je me rends compte que si je mets simplement le champ "programme" comme paramètre style et étiquette (où j'ai collé votre formule : champ virtuel, j'ai essayé texte et décimal), il n'y a ni symbologie ni étiquette.
Cependant si je mets la formule dans l'un des deux (et programme dans l'autre, ou alors la formule dans les deux) ça fonctionne. En somme il semblerait que le lien avec le champ ne fonctionne pas.
Pourtant je peux constater que mon champ "Minute" ("Minute ( now ()", devenu inutile grâce à votre formule) lui, fonctionne. Il s'agit d'un champ virtuel au format texte qui exporte la minute actuelle en temps continu au moyen d'une formule, certes plus simple que la vôtre mais pas fondamentalement différente, j'ai bon ?

Est-ce que quelqu'un saurait-il expliquer cela ?

Et d'autre (si l'objectif n'est que d'afficher couleur et étiquette sur un rendu) il semble finalement inutile d'utiliser cette formule dans un champs, il suffit de la coller dans les entrées de style et d'étiquette. Qu'en pensez vous ?

Hors ligne

 

#5 Thu 01 February 2018 14:00

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

Re: QGIS: "recherche matricielle" (à la Excel) dans une autre couche ?

Bonjour,

Et d'autre (si l'objectif n'est que d'afficher couleur et étiquette sur un rendu) il semble finalement inutile d'utiliser cette formule dans un champs, il suffit de la coller dans les entrées de style et d'étiquette. Qu'en pensez vous ?


J'aurais tendance à dire "oui!". Pas la peine de polluer la table de données avec ces infos.
Pour le reste du message, j'avoue ne pas avoir de début d'explications pour le bug ni avoir réellement tout compris smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB