<div dir="ltr">Muito google! ;)<div> </div><div>Abc</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-15 12:53 GMT+01:00 Hugo <span dir="ltr"><<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Very cool. Obrigado pela partilha Duarte.<br>
Um abc,</p>
<div class="gmail_quote"><div><div class="h5">On 15 May 2014 12:50, "Duarte Carreira" <<a href="mailto:dncarreira@gmail.com" target="_blank">dncarreira@gmail.com</a>> wrote:<br type="attribution"></div></div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<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" target="_blank">layer.name</a>() == 'cadastro_geometrico'):</div><div class="gmail_extra"> vl_id=<a href="http://layer.id" target="_blank">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" target="_blank">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" target="_blank">dncarreira@gmail.com</a>><br>To: <a href="mailto:qgis-pt@lists.osgeo.org" target="_blank">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>
<br></div></div><div class="">_______________________________________________<br>
QGIS-pt mailing list<br>
<a href="mailto:QGIS-pt@lists.osgeo.org" target="_blank">QGIS-pt@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt" target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt</a><br>
<br></div></blockquote></div>
</blockquote></div><br></div>