Mais

Erro de atributo: o objeto “List” não tem getFeatures de atributo

Erro de atributo: o objeto “List” não tem getFeatures de atributo


Estou desenvolvendo um plugin que verifica a geometria multipartes em uma camada no qgis 2.6. Estou recebendo um objeto de lista de erros sem o atributo getFeatures. Meu trecho de código está anexado abaixo.

def run (self): "" "Método de execução que realiza todo o trabalho real" "" # mostra a caixa de diálogo self.dlg.show () # Limpe o QcomboBox antes de carregar as camadas self.dlg.multipartcombo.clear () #self. dlg.multipartcombo.clear () layer = self.iface.mapCanvas (). layers () para camada na camada: if layer.type () == QgsMapLayer.VectorLayer: self.dlg.multipartcombo.addItem (layer.name () , camada) # Execute o loop de evento de diálogo result = self.dlg.exec_ () # Veja se OK foi pressionado # Encontre todos os recursos multipartes na camada ativa if result: layer = self.dlg.multipartcombo.itemData (self.dlg. multipartcombo.currentIndex ()) iter = layer.getFeatures () geoms = [] para recurso em iter: geom = feature.geometry () if geom.isMultipart (): layer.select (feature.id ()) geoms.append ( geom) se resultado == 1: índice = self.dlg.featurecombo.currentIndex () camada = self.dlg.featurecombo.itemData (índice) se camada> 0: QMessageBox.information (self.iface.mainWindow (), 'Lá são% i recursos multipartes nesta camada '% len (geoms)) else: QMessageBox.informatio n (self.iface.mainWindow (), "Aviso!", 'Carregar uma camada!')

Você precisa especificar de qual camada deseja obter recursos.

Em seu código,camadasé uma lista de camadas, enquantocamadaé uma camada específica.

Você só pode ligargetFeatures ()de uma camada vetorial.

Além disso, você provavelmente deseja obter a camada selecionada de seu QComboBox. Então, tente algo assim (não testei, provavelmente precisa de alguns ajustes):

se o resultado: layer = self.dlg.multipartcombo.itemData (self.dlg.multipartcombo.currentIndex ()) iter = layer.getFeatures ()…

Assista o vídeo: Python List Comprehensions