[QGIS-pt] acção que faz zoom a registo noutro layer

Hugo hfpmartins gmail.com
Quinta-Feira, 15 de Maio de 2014 - 04:53:26 PDT


Very cool. Obrigado pela partilha Duarte.
Um abc,
On 15 May 2014 12:50, "Duarte Carreira" <dncarreira at gmail.com> wrote:

> 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 at gmail.com>
>> To: qgis-pt at 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
>>
>>
> _______________________________________________
> QGIS-pt mailing list
> QGIS-pt at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-pt/attachments/20140515/4cc01c68/attachment.html>


More information about the QGIS-pt mailing list