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 Wed 12 August 2015 17:17

jerome_m
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Nov 2012
Messages: 51

QGIS : Récupérer ID de couche pour get_feature (couche, champ, valeur)

Bonjour à tous,

Petit problème avec l'utilisation des fonctions dans Qgis :

J'ai deux couches contenant des polygones.
Je veux rajouter un champs booléen dans la table attributaire de la première couche. Il sera à TRUE si l'entité intersecte une autre entité de la deuxième couche.

J'utilise donc la fonction suivante :

intersects(
               $geometry,
               geometry(
                             getFeature(
                                            'layer',
                                            'colonne',
                                            'valeur')
                             )
               )

Mon problème vient de la récupération du nom de la deuxième couche. J'utilise la fonction getFeature qui prend en paramètre 'layer'... Mais comment récupérer simplement ce nom ?

En bidouillant avec l'API python, j'ai réussi à obtenir un id pour chaque couche du type 'nom_dateCréation'.

#récupération des couches actives
mycanvas = qgis.utils.iface.mapCanvas()
allLayers = mycanvas.layers()

#affichage dans la console du nom des couches récupérées
for i in allLayers:
    print i.originalName() +' ' + i.name()

#affichage de l'id de la couche souhaitée
for i in allLayers:
    if i.name()=='my_layer':
        id=i.id()
       
print id

#on obtiens : my_layer20150812154136133

Si l'on met cet id dans le getFeature, cela fonctionne, mais j'aimerais àvoir une méthode me permettant de récupérer cet id sans passer par du code python.

Merci d'avance !

Hors ligne

 

#2 Wed 12 August 2015 17:52

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

Re: QGIS : Récupérer ID de couche pour get_feature (couche, champ, valeur)

Bonjour,
Avec getFeature, tu peux juste utiliser le nom de la couche telle qu'il apparaît dans la liste de couches. Pas besoin d'aller chercher l'identifiant unique de la couche.

Hors ligne

 

#3 Thu 13 August 2015 09:26

jerome_m
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Nov 2012
Messages: 51

Re: QGIS : Récupérer ID de couche pour get_feature (couche, champ, valeur)

Merci beaucoup Santanna ! J'étais persuadé que ça ne fonctionnait pas avec juste le nom. Du coup, c'est beaucoup plus simple !

Bonne journée !

Hors ligne

 

#4 Mon 31 August 2015 16:55

jerome_m
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Nov 2012
Messages: 51

Re: QGIS : Récupérer ID de couche pour get_feature (couche, champ, valeur)

J'ai encore un problème avec mon script...
Je crée un modele sous QGis (avec le modeleur graphique). Comme précisé au dessus, je travaille sur une couche et je veux lui rajouter un champs booléen si sa géométrie intersecte la géométrie d'une autre couche.

Pour cela j'utilise la fonction "Field Calculator" avec la fonction suivante :
intersects( $geometry,  geometry(getFeature('layer','colonne','valeur') ) )

Le problème vient maintenant que ma couche d'intersection n'est pas dans mon projet (car crée en amont par mon modèle) et l'intersection ne fonctionne donc pas... J'aimerai utiliser une autre méthode mais je manque d'idée !

Quelqu'un aurait une idée pour m'aider ?
Merci d'avance

Hors ligne

 

#5 Wed 02 September 2015 10:30

jerome_m
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Nov 2012
Messages: 51

Re: QGIS : Récupérer ID de couche pour get_feature (couche, champ, valeur)

Résolu en faisant une jointure spatiale entre mes deux couches (join by location) puis en créant un champs booleen dans ma nouvelle couche qui est à 1 si un champs join n'est pas nul.

Ainsi, pas besoin de faire référence à une autre couche dans la formule du Field Calculator !

Hors ligne

 

Pied de page des forums

Powered by FluxBB