[GIS] ‘QgsVectorDataProvider’ object has no attribute ‘select’

pythonpython-2.7qgisqgis-plugins

I want to create a tool layer in QGIS 2.4 that will select any vector features that intersect with that point. In my script I tried the following function:

def selectFeature(self, point, button):

       pntGeom = QgsGeometry.fromPoint(point)
       pntBuff = pntGeom.buffer( (self.canvas.mapUnitsPerPixel() * 2),0)
       rect = pntBuff.boundingBox()
       cLayer = self.canvas.currentLayer()
       selectList = []
       if cLayer:
               provider = cLayer.dataProvider()
               feat = QgsFeature()
               provider.select([],rect)
               while provider.nextFeature(feat):
                       if feat.geometry().intersects(pntGeom):
                               selectList.append(feat.id())
               cLayer.setSelectedFeatures(selectList)

But I have the following error:

AttributeError: 'QgsVectorDataProvider' object has no attribute 'select'
in line "provider.select([],rect)"

What am I doing wrong?

Best Answer

I've tried your code, but it not work. It can't find selected feature. So, I make an edit from your code. This is the edited code:

def selectFeature(self, point, button):
        pntGeom = QgsGeometry.fromPoint(point)
        pntBuff = pntGeom.buffer((self.canvas.mapUnitsPerPixel() * 2), 0)
        rect = pntBuff.boundingBox()

        cLayer = self.canvas.currentLayer()
        selectList = []
        if cLayer:
            rq = QgsFeatureRequest(rect)
            for feature in cLayer.getFeatures(rq):
                print feature
                if feature.geometry().intersects(rect):
                    selectList.append(feature.id())

            cLayer.setSelectedFeatures(selectList)
        else:
            print "No layer selected on TOC"

        print selectList

I am sorry I can't add this answer as comment, because my reputation are not enough. I hope this can help others.

Related Question