Existe-t-il un moyen de sélectionner un attribut dans une couche de polygones et d'insérer la valeur dans un champ virtuel d'une couche de points en utilisant "dedans" dans la calculatrice de champ?
CASE
WHEN within($geometry, geometry_polygon) THEN attribute_polygon
END
qgis
field-calculator
layers
within
Mer lunaire
la source
la source
Réponses:
Les jointures spatiales sont disponibles dans le calculateur de champ après l'installation du plugin refFunctions.
la source
Par défaut, la calculatrice de champ ne prend pas en charge les jointures spatiales entre les couches d'entités. Mais, si vous jetez un œil à la publication de NathanW sur l' éditeur de fonction pour les expressions qgis, vous pourrez constater que nous pouvons écrire notre propre interaction de données.
Le script suivant vous permettra d'exprimer ce que vous recherchez. Cela fonctionne en itérant à travers toutes les entités sur la couche polygonale et s'il y a une jointure spatiale, puis référencez les données tabulaires de la colonne spécifiée:
Exemple de couche de polygone
Vous trouverez ci-dessous un exemple de couche de polygones que vous pourriez avoir. J'ai également créé une couche de points correspondante que vous verrez dans l'image finale.
Utilisation de l'expression
Remarque: si vous souhaitez utiliser une colonne distincte, vous devez modifier le deuxième argument pour qu'il corresponde au nom de la colonne dans le jeu de données du polygone. Par exemple, vous pouvez utiliser la colonne «AreaNumber», mais vous devez faire correspondre le type de colonne dans les paramètres de la calculatrice de champ.
Résultat
Vous pouvez voir que la valeur de colonne par défaut a été appliquée là où il n'y a pas de jointure spatiale et que les autres ont correspondu aux données correctes. Notez que le script que j'ai donné ne se joindra qu'au premier match. Vous auriez besoin de créer une autre logique métier si vos polygones se chevauchaient.
la source
Cela peut être fait dans Field Calculator avec fonction
aggregate()
. Dans la couche de points, créez un nouveau champ avec une expression de calculatrice de champ comme celle-ci:Où le
layer
nom de la couche de polygone est écrit comme une chaîne,aggreagate
est une fonction d'agrégation (peut également être utilisé comme somme, etc.), si leexpression
champ des valeurs sera pris,concatenator
joint la chaîne de caractères (doit être définie, même dans ce cas) etfilter
filtre les entités en fonction lors de l'expression (dans ce cas, intersecte la géométrie du calque avec la géométrie du calque parent).Pour plus d'informations, consultez la documentation Aggregates QGIS .
Pour les mises à jour automatiques, des champs virtuels peuvent être utilisés ou vous pouvez définir l'expression comme valeur par défaut dans les paramètres du formulaire d'attributs dans les propriétés du calque ( documentation sur les paramètres du formulaire d'attribut ).
la source
geometry(@parent)
) ne sont prises en charge qu'à partir de QGIS 3. Juste au cas où quelqu'un lisant ceci utilise toujours la 2.18 ...