Fazer módulo Python e gravá-lo na pasta do projecto qgis
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 ] )
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.
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 ] )
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.
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 ] )
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.
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
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
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.
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