Acessando a tela do mapa QGIS como uma variável para expressões

8

É possível acessar o QGIS Map Canvas como um valor de variável ou expressão a ser usado na calculadora de campo ou no mecanismo de identificação?

(ou seja, para que você possa criar uma expressão que selecione / interroga recursos visíveis / presentes em uma visualização específica da tela, de maneira semelhante ao compositor de impressão "filtre a legenda pelo conteúdo do mapa")

(QGIS 2.18.1 [osgeo4w], win7)

EDIT:
Caso de uso potencial (fictício) 1 - Existem 50 polígonos em uma camada, atualmente existem 20 polígonos visíveis na visualização atual da tela do mapa. Gostaria de estilizar o azul do polígono se houver <= 25 polígonos visíveis ou denomine-os de verde se houver> = 25 polígonos visíveis.

Caso de uso potencial (fictício) 2 - Existem 50 polígonos em uma camada, atualmente existem 10 polígonos visíveis, 5 com um valor de atributo 'House' no campo / coluna "Tipo de construção" e 5 com o valor de 'Garagem' no campo / coluna "Tipo de construção", visível na visualização atual da tela do mapa. Retorno: o valor igual ao número de polígonos que são garagens ... answer = 5.

guestagain
fonte
3
Você tem algumas variáveis ​​(map_extent_center / height / width, map_id, map_scale, map_rotation). Caso contrário, no master, há uma is_selected função para saber se um recurso está selecionado. Pode valer a pena ter mais detalhes sobre o que você gostaria de fazer.
Denis Rouzaud
Obrigado @Denis Rouzaud. Eu usei algumas dessas variáveis ​​em vários contextos. Esta pergunta foi feita como uma tentativa simplificada de resolver o problema (ou uma parte dele) em outra pergunta que fiz aqui: gis.stackexchange.com/questions/218508/…
guestagain
@DenisRouzaud Gostaria de postar isso como resposta? Caso contrário, estou tentado a fechar isso como duplicado de gis.stackexchange.com/questions/218508/…
underdark
Vamos fechar. A questão é um pouco vaga.
Denis Rouzaud
1
Não acho que a pergunta seja vaga, nem simplesmente uma duplicata da outra questão vinculada, mas mais detalhada. De fato, ele procura especificamente uma solução que não possa ser solucionada pelas variáveis ​​de expressão listadas no primeiro comentário, e uma resolução para a consulta não se limita ao caso de uso na pergunta vinculada. ... E parece haver alguns outros interessados ​​em uma resposta para a pergunta que deve ter seus próprios aplicativos para essa funcionalidade ou para uma solução possível no momento.
precisa saber é

Respostas:

1

Uma ferramenta para ir além das variáveis ​​atualmente disponíveis seria uma expressão customizada em python.

Que eu saiba, essa é a única ferramenta disponível no momento para acessar a tela do mapa da maneira que você descreve e usa essas informações em expressões.

Para resolver seu caso de uso fictício 1, você pode fazer algo assim:

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

Em seguida, você pode configurar estilos baseados em regras usando filtros como:

visibleFeaturesCount('mylayer') > 20

A API de tela cheia pode ser encontrada aqui .

Jesse McMillan
fonte
Muito obrigado, @Jesse McMillan. Parece uma resposta muito útil, que testarei em mais detalhes assim que eu travar em outro projeto. Um teste rápido ao colar o acima em uma caixa de diálogo "Selecionar por expressão", conforme o tutorial vinculado, não funcionou, pois a caixa de diálogo não tinha opções / botões para salvar e / ou executar o script da maneira descrita pelo tutorial e exibida em sua capturas de tela. É novo no uso de scripts python (ou seja lá como eles são chamados corretamente), mas mal posso esperar para começar a entender isso. Onde você espera que eu defina / configure a variável usando o código acima?
guestagain
É um pouco confuso, mas o que você faz é selecionar o botão 'carregar' na guia de expressões personalizadas. Uma vez carregado, o comando adicional será exibido nas suas expressões qgis disponíveis.
Jesse McMillan