[QGIS-pt] Iterações sobre atributos selecionados.
Fernando M. Roxo da Motta
petro at roxo.org
Mon Nov 30 06:55:00 PST 2015
On Mon, 30 Nov 2015 11:04:03 +0000, Alexandre Neto
<senhor.neto gmail.com> wrote:
> Bom dia
Bom dia Alexandre.
>
> Fernando M. Roxo da Motta <petro roxo.org> escreveu no dia sáb,
> 28/11/2015 às 13:45:
>
> >
> > Eu tenho duas coleções de pontos, por exemplo Rec e Fon. Em
> > princípio são dois shapefiles. Em linhas gerais, estou
> > percorrendo as duas coleções como:
> >
> > RPts = ogr.Open(Rec, False)
> > Rs = RPs.GetLayer(0)
> > NR = Rs.GetFeatureCount()
> >
> > for i in xrange(NumREC):
> > R = Rs.GetNextFeature()
> > {faz alguma coisa com os R's}
> >
> >
> Acho que podes iterar os elementos de uma camada sem necessitar de os
> contar antes:
Ok. A contagem foi como um teste extra com relação à "sanidade" da
camada. A contagem está sendo obtida da seguinte maneira:
NR = Rs.GetFeatureCount()
if NR == 0:
raise GeoAlgorithmExecutionException(
'There are no Points in input vector Layer')
Talvez eu possa iterar como sugerido abaixo e se ao final do laço a
contagem for zero emitir a exceção.
>
> for feature in layer.getFeatures():
> # Faz qualquer coisa com cada elemento
>
> Honestamente, não sei se é mais eficiente, mas fica mais simples
>
Concordo, mas não sei se a forma como faço o acesso está errado
(talvez crie uma instância de um tipo diferente de objeto), mas eu
estou obtendo uma mensagem de erro. Usei o método dir() sobre o
objeto "Rs" e o método "getFeatures()" não aparece listado:
['AlterFieldDefn', 'Clip', 'CommitTransaction', 'CreateFeature',
'CreateField', 'CreateFields', 'DeleteFeature', 'DeleteField',
'Dereference', 'Erase', 'GetExtent', 'GetFIDColumn', 'GetFeature',
'GetFeatureCount', 'GetFeaturesRead', 'GetGeomType',
'GetGeometryColumn', 'GetLayerDefn', 'GetName', 'GetNextFeature',
'GetRefCount', 'GetSpatialFilter', 'GetSpatialRef', 'Identity',
'Intersection', 'Reference', 'ReorderField', 'ReorderFields',
'ResetReading', 'RollbackTransaction', 'SetAttributeFilter',
'SetFeature', 'SetIgnoredFields', 'SetNextByIndex', 'SetSpatialFilter',
'SetSpatialFilterRect', 'StartTransaction', 'SymDifference',
'SyncToDisk', 'TestCapability', 'Union', 'Update', '__bool__',
'__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattr__', '__getattribute__', '__getitem__', '__hash__',
'__init__', '__iter__', '__len__', '__module__', '__new__',
'__nonzero__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'__swig_getmethods__', '__swig_setmethods__', '__weakref__', 'next',
'schema', 'this']
>
> > Esta seleção está funcionando, até onde consegui testar. A minha
> > pergunta é: Uma vez realizada a seleção, como posso iterar sobre a
> > lista de Rec's selecionados?
> >
>
> Se tens uma layer com elementos seleccionados, pode usar o método
> selectedFeatures()
>
> for feature in layer.selectedFeatures():
> #Fazer qq coisa com cada elemento
Ainda não testei esta opção, na verdade o método "selectedFeatures()"
também não aparece na lista acima. :(
Obrigado pela sua atenção.
Sds.
>
> Cumprimentos,
> Alexandre Neto
Roxo
--
---------------- Non luctari, ludare -------------------+ WYSIWYG
Fernando M. Roxo da Motta <petro roxo.org> | Editor?
Except where explicitly stated I speak on my own behalf.| VI !!
( Usuário Linux registrado #39505 ) | I see text,
------------ Quis custodiet ipsos custodes?-------------+ I get text!
More information about the QGIS-pt
mailing list