[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