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

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):

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

-- 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

Very cool. Obrigado pela partilha Duarte.
Um abc,

···

O script que criei foi este (gravado na pasta do projecto, com o nome que usamos depois na acção - p.e. accoes.py):

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

-- 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

Muito google! :wink:

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

QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

O script que criei foi este (gravado na pasta do projecto, com o nome que usamos depois na acção - p.e. accoes.py):

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

-- 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

A vantagem de ter o código num ficheiro é que as acções python só aceitam
código numa única linha,

o manual deixa intender que sim, estou enganado?

http://www.qgis.org/en/docs/user_manual/working_with_vector/vector_properties.html#actions-menu

Abraço!

Ehehehh, google is watching you!! Muito 1984 :slight_smile:
Sim de volta ao solinho e a todas poutras coisas boas :slight_smile:

E digo-vos… FEELING GOOD!!!

Abc,

···

2014-05-15 13:21 GMT+01:00 Giovanni Manghi <giovanni.manghi@faunalia.pt>:

A vantagem de ter o código num ficheiro é que as acções python só aceitam
código numa única linha,

o manual deixa intender que sim, estou enganado?

http://www.qgis.org/en/docs/user_manual/working_with_vector/vector_properties.html#actions-menu

Abraço!


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt


Hugo Martins

2014-05-15 12:43 GMT+01:00 Duarte Carreira <dncarreira@gmail.com>:

Ok, então aqui fica a solução que encontrei.

olá Duarte, acho que ficava bem no blog

http://qgis.pt/blog/

que achas?

--
Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216
--

Concordo. Acho que era um post catita.
Duarte tu tens algum email ao qual tenhas associado um gravatar? Se sim, podes enviar-me esse email (pode ser em privado se quiseres). Isto se quiseres publicar no blog :slight_smile:

Abc,

···

On 15 de Maio de 2014 às 18:00, Giovanni Manghi <giovanni.manghi@faunalia.pt> wrote:

2014-05-15 12:43 GMT+01:00 Duarte Carreira <dncarreira@gmail.com>:

Ok, então aqui fica a solução que encontrei.

olá Duarte, acho que ficava bem no blog

http://qgis.pt/blog/

que achas?


Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt


Hugo Martins

criei um gravatar agora para este email… acho que ficava bem no blog… :wink: é uma honra!

···

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

Concordo. Acho que era um post catita.
Duarte tu tens algum email ao qual tenhas associado um gravatar? Se sim, podes enviar-me esse email (pode ser em privado se quiseres). Isto se quiseres publicar no blog :slight_smile:

Abc,

On 15 de Maio de 2014 às 18:00, Giovanni Manghi <giovanni.manghi@faunalia.pt> wrote:

2014-05-15 12:43 GMT+01:00 Duarte Carreira <dncarreira@gmail.com>:

Ok, então aqui fica a solução que encontrei.

olá Duarte, acho que ficava bem no blog

http://qgis.pt/blog/

que achas?


Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt


Hugo Martins

Ok Duarte,

Não sei se queres fazer algum texto introdutório a explicar o porquê deste desenvolvimento… Se quiseres fazer um texto introdutório rápido só para contextualizar um pouco a coisa era catita. Podes mandar-me o texto num email que logo trato de o colocar no blog.

Abc,

···

2014-05-15 18:39 GMT+01:00 Duarte Carreira <dncarreira@gmail.com>:

criei um gravatar agora para este email… acho que ficava bem no blog… :wink: é uma honra!


Hugo Martins

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

Concordo. Acho que era um post catita.
Duarte tu tens algum email ao qual tenhas associado um gravatar? Se sim, podes enviar-me esse email (pode ser em privado se quiseres). Isto se quiseres publicar no blog :slight_smile:

Abc,

On 15 de Maio de 2014 às 18:00, Giovanni Manghi <giovanni.manghi@faunalia.pt> wrote:

2014-05-15 12:43 GMT+01:00 Duarte Carreira <dncarreira@gmail.com>:

Ok, então aqui fica a solução que encontrei.

olá Duarte, acho que ficava bem no blog

http://qgis.pt/blog/

que achas?


Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt


Hugo Martins