<div dir="ltr">Ok, então aqui fica a solução que encontrei.<div><br></div><div>1) Fazer módulo Python e gravá-lo na pasta do projecto qgis</div><div>2) Definir acção Python que importa o script e executa a função nesse script<br>
<div class="gmail_extra"><br></div><div class="gmail_extra">O script que criei foi este (gravado na pasta do projecto, com o nome que usamos depois na acção - p.e. accoes.py):</div><div class="gmail_extra"><br></div><div class="gmail_extra">
<div class="gmail_extra"># -*- coding: UTF-8 -*-</div><div class="gmail_extra">from qgis.core import *</div><div class="gmail_extra">import qgis.utils</div><div class="gmail_extra"><br></div><div class="gmail_extra">def zoomToPredioSelec( NUMPRED ):<br>
</div><div class="gmail_extra">  canvas = qgis.utils.iface.mapCanvas()<br></div><div class="gmail_extra">  layerMap = QgsMapLayerRegistry.instance().mapLayers()</div><div class="gmail_extra">  vl_id = -1</div><div class="gmail_extra">
  for name, layer in layerMap.iteritems():</div><div class="gmail_extra">      if(<a href="http://layer.name">layer.name</a>() == 'cadastro_geometrico'):</div><div class="gmail_extra">          vl_id=<a href="http://layer.id">layer.id</a>()</div>
<div class="gmail_extra">  vl = layerMap[vl_id]</div><div class="gmail_extra">  sFilterExp = u'"NUMPRED" = \'%s\'' % NUMPRED</div><div class="gmail_extra">  it = vl.getFeatures( QgsFeatureRequest().setFilterExpression ( sFilterExp ) )</div>
<div class="gmail_extra">  vl.setSelectedFeatures( [ <a href="http://f.id">f.id</a>() for f in it ] )</div><div class="gmail_extra"><br></div><div class="gmail_extra">  canvas.zoomScale(15000)<br></div><div class="gmail_extra">
  qgis.utils.iface.setActiveLayer(vl)</div><div class="gmail_extra">  qgis.utils.iface.actionPanToSelected().trigger()</div><div class="gmail_extra">  canvas.refresh()</div><div class="gmail_extra"><br></div><div class="gmail_extra">
<br></div><div class="gmail_extra">Este script é para ser usado a partir de uma acção definida numa tabela alfanumérica que tem o campo NUMPRED.</div><div class="gmail_extra">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.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">A acção é definida com este código Python:</div><div class="gmail_extra">import accoes; accoes.zoomToPredioSelec('[% "NUMPRE" %]')<br></div><div class="gmail_extra">
<br></div><div class="gmail_extra">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.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Até à próxima.</div><div class="gmail_extra">Duarte</div><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>From: Duarte Carreira <<a href="mailto:dncarreira@gmail.com">dncarreira@gmail.com</a>><br>To: <a href="mailto:qgis-pt@lists.osgeo.org">qgis-pt@lists.osgeo.org</a><br>Cc: <br>Date: Wed, 14 May 2014 17:46:26 +0100<br>
Subject: [QGIS-pt] acção que faz zoom a registo noutro layer<br><div dir="ltr">Olá a todos! Aqui vai a minha estreia na lista!<div><br></div><div>O que preciso fazer é criar uma action que usa um campo para encontrar e fazer zoom a um registo noutro layer.</div>
<div><br></div><div>Alguma ajuda/receita/link para isto?</div>
<div><br></div><div>Mais detalhadamente:</div><div><br></div><div>1-selecionar registo na tabela A</div><div>2-obter valor do campo Id_B</div><div>3-fazer zoom ao registo na tabela B cujo id=Id_B</div><div><br></div><div>

Obrigado!</div><div>Duarte</div></div>
<br></blockquote></div></div></div></div>