Accès au canevas de carte QGIS en tant que variable pour les expressions

8

Est-il possible d'accéder à QGIS Map Canvas en tant que variable ou valeur d'expression à utiliser dans le calculateur de champ ou le moteur d'étiquetage?

(c.-à-d. afin que vous puissiez créer une expression qui sélectionne / interroge des entités qui sont visibles / présentes dans une vue particulière de la toile de la même manière que le compositeur d'impression «filtre la légende par le contenu de la carte»)

(QGIS 2.18.1 [osgeo4w], win7)

EDIT:
Cas d'utilisation potentiel (fictif) 1 - Il y a 50 polygones dans une couche, actuellement il y a 20 polygones visibles dans la vue actuelle du canevas de carte, je voudrais styliser le bleu du polygone s'il y a <= 25 polygone visible ou les styliser en vert s'il y a> = 25 polygones visibles.

Cas d'utilisation potentiel (fictif) 2 - Il y a 50 polygones dans une couche, actuellement il y a 10 polygones visibles, 5 qui ont une valeur d'attribut "Maison" dans le champ / la colonne "Type de bâtiment" et 5 qui ont la valeur de 'Garage' dans le champ / la colonne "Type de bâtiment", visible dans la vue actuelle du canevas de la carte. Retour: la valeur égale au nombre de polygones qui sont des garages ... réponse = 5.

guestagain
la source
3
Vous avez des variables (map_extent_center / height / width, map_id, map_scale, map_rotation) Sinon, dans master, il y a une is_selected fonction pour savoir si une entité est sélectionnée. Cela pourrait valoir la peine d'avoir plus de détails sur ce que vous aimeriez faire.
Denis Rouzaud
Merci @Denis Rouzaud. J'ai utilisé certaines de ces variables dans divers contextes. Cette question a été posée comme une tentative simplifiée de résoudre le problème (ou une partie de celui-ci) dans une autre question que j'ai posée ici: gis.stackexchange.com/questions/218508/…
guestagain
@DenisRouzaud Voulez-vous publier cela comme réponse? Sinon, je suis tenté de fermer ceci en double de gis.stackexchange.com/questions/218508/…
underdark
Fermons-le. La question est un peu vague.
Denis Rouzaud
1
Je ne pense pas que la question soit vague ni simplement un double de l'autre question liée mais plus détaillée. En effet, il recherche spécifiquement une solution qui n'est pas résoluble par les variables d'expression répertoriées dans le premier commentaire, et une résolution de la requête n'est pas limitée au cas d'utilisation de la question liée. ... Et il semble y avoir quelques autres personnes intéressées par une réponse à la question qui doivent avoir leurs propres applications pour une telle fonctionnalité ou une solution de contournement actuellement possible.
guestagain

Réponses:

1

Un outil pour aller au-delà des variables actuellement disponibles serait une expression personnalisée python.

À ma connaissance, il s'agit du seul outil actuellement disponible pour accéder au canevas de carte de la manière dont vous décrivez et utilisez ces informations dans les expressions.

Pour résoudre votre cas d'utilisation fictif 1, vous pouvez faire quelque chose comme ceci:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def visibleFeaturesCount(layerName, feature, parent):
    lyr = QgsMapLayerRegistry.instance().mapLayersByName(layerName)[0]
    extentRect = iface.mapCanvas().extent()
    request = QgsFeatureRequest().setFilterRect(extentRect)
    feats = lyr.getFeatures(request)
    count = 0
    for feat in feats:
        count += 1
    return count

Ensuite, vous pouvez configurer des styles basés sur des règles à l'aide de filtres tels que:

visibleFeaturesCount('mylayer') > 20

L'API de canevas complète peut être trouvée ici .

Jesse McMillan
la source
Merci beaucoup @Jesse McMillan. Cela semble être une réponse très utile que je testerai plus en détail dès que je reçois un frein d'un autre projet. Un test rapide avec collage de ce qui précède dans une boîte de dialogue "Sélectionner par expression" selon le didacticiel lié n'a pas fonctionné car la boîte de dialogue n'avait pas d'options / boutons pour enregistrer et / ou exécuter le script de la manière décrite et affichée dans son captures d'écran. Nouveau dans l'utilisation de scripts python (ou tout autre nom approprié), mais j'ai hâte de commencer à me renseigner. Où pensez-vous que je définirais / configurerais la variable en utilisant le code ci-dessus?
guestagain
C'est un peu déroutant, mais ce que vous faites est de sélectionner le bouton 'charger' dans l'onglet des expressions personnalisées. Une fois chargée, la commande supplémentaire s'affichera dans vos expressions qgis disponibles.
Jesse McMillan