[QGIS-pt] acção que faz zoom a registo noutro layer
Duarte Carreira
dncarreira gmail.com
Quinta-Feira, 15 de Maio de 2014 - 04:43:55 PDT
Ok, então aqui fica a solução que encontrei.
1) Fazer módulo Python e gravá-lo na pasta do projecto qgis
2) Definir acção Python que importa o script e executa a função nesse script
O script que criei foi este (gravado na pasta do projecto, com o nome que
usamos depois na acção - p.e. accoes.py):
# -*- coding: UTF-8 -*-
from qgis.core import *
import qgis.utils
def zoomToPredioSelec( NUMPRED ):
canvas = qgis.utils.iface.mapCanvas()
layerMap = QgsMapLayerRegistry.instance().mapLayers()
vl_id = -1
for name, layer in layerMap.iteritems():
if(layer.name() == 'cadastro_geometrico'):
vl_id=layer.id()
vl = layerMap[vl_id]
sFilterExp = u'"NUMPRED" = \'%s\'' % NUMPRED
it = vl.getFeatures( QgsFeatureRequest().setFilterExpression ( sFilterExp
) )
vl.setSelectedFeatures( [ f.id() for f in it ] )
canvas.zoomScale(15000)
qgis.utils.iface.setActiveLayer(vl)
qgis.utils.iface.actionPanToSelected().trigger()
canvas.refresh()
Este script é para ser usado a partir de uma acção definida numa tabela
alfanumérica que tem o campo NUMPRED.
O user ao clicar sobre um registo com o botão direito consegue despoletar a
acção, com o valor desse campo. Resulta assim que é selecionado o prédio no
layer de cadastro e centrado nesse prédio à escala 1:15000.
A acção é definida com este código Python:
import accoes; accoes.zoomToPredioSelec('[% "NUMPRE" %]')
A vantagem de ter o código num ficheiro é que as acções python só aceitam
código numa única linha, o que complica muito quando o código tem já tem
algumas linhas e com indentação ainda pior fica. Assim é mais fácil. Também
permite ter no mesmo ficheiro código para várias acções.
Até à próxima.
Duarte
> From: Duarte Carreira <dncarreira gmail.com>
> To: qgis-pt lists.osgeo.org
> Cc:
> Date: Wed, 14 May 2014 17:46:26 +0100
> Subject: [QGIS-pt] acção que faz zoom a registo noutro layer
> Olá a todos! Aqui vai a minha estreia na lista!
>
> O que preciso fazer é criar uma action que usa um campo para encontrar e
> fazer zoom a um registo noutro layer.
>
> Alguma ajuda/receita/link para isto?
>
> Mais detalhadamente:
>
> 1-selecionar registo na tabela A
> 2-obter valor do campo Id_B
> 3-fazer zoom ao registo na tabela B cujo id=Id_B
>
> Obrigado!
> Duarte
>
>
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/qgis-pt/attachments/20140515/80c5b03e/attachment.html>
More information about the QGIS-pt
mailing list