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

Duarte Carreira dncarreira gmail.com
Quinta-Feira, 15 de Maio de 2014 - 05:19:53 PDT


Muito google! ;)

Abc


2014-05-15 12:53 GMT+01:00 Hugo <hfpmartins  gmail.com>:

> Very cool. Obrigado pela partilha Duarte.
> Um abc,
> On 15 May 2014 12:50, "Duarte Carreira" <dncarreira  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  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
>>>
>>>
>> _______________________________________________
>> QGIS-pt mailing list
>> QGIS-pt  lists.osgeo.org
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
>>
>>
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/qgis-pt/attachments/20140515/1f93a76d/attachment-0001.html>


More information about the QGIS-pt mailing list