I am trying to select (point) features within an envelope (buffer) of the start point of a line feature.
I have
line_layer = QgsProject.instance().mapLayersByName('DSC_Roads')[0]
chainage_layer= QgsProject.instance().mapLayersByName('DSC_Roads_10m_Chainage')[0]
for feature in line_layer.getFeatures(): # for each road select line and point features
road = feature['RoadMntnc']
if road == "Bamboo_Creek_Rd": #temporary for testing
request = QgsFeatureRequest(QgsExpression('"RoadMntnc"= \'{0}\''.format(road)))
l_sel = line_layer.getFeatures(request)
c_sel = chainage_layer.getFeatures(request) #make sure points are on the same road
for l in l_sel:
geom = l.geometry().asPolyline()
g = QgsGeometry.fromPointXY(geom[0])
buffer = g.buffer(5,4) #10m buffer with 4 segments
print (buffer) #test to see if the buffer works
processing.run("qgis:selectbylocation",buffer,c_sel,['within'],0,0)
chainage_selection=layer.selectedFeatures()
print (chainage_selection) #test to see if selection worked
With this I am getting an error as there's probably something wrong with the selectbylocation that's based on https://gis.stackexchange.com/a/259441/2891
Traceback (most recent call last):
File "C:\OSGEO4~1\apps\Python37\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<string>", line 12, in <module>
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\processing\tools\general.py", line 106, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish, feedback, context)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\processing\core\Processing.py", line 130, in runAlgorithm
if context.feedback() is None:
AttributeError: 'int' object has no attribute 'feedback'
--- NEW CODE based on Joseph's answer
I tried the following but still get the same error
for l in l_sel:
geom = l.geometry().asPolyline()
g = QgsGeometry.fromPointXY(geom[0])
buffer = g.buffer(5,4) #10m buffer with 4 segments
buff_layer = QgsVectorLayer('Polygon', 'buffer' , 'memory')
prov = buff_layer.dataProvider()
feat = QgsFeature()
feat.setGeometry(buffer)
prov.addFeatures([feat])
buff_layer.updateExtents()
QgsProject.instance().addMapLayers([buff_layer])[0]
processing.run("qgis:selectbylocation",buff_layer,c_sel,['within'],0,0)
chainage_selection=layer.selectedFeatures()
print (chainage_selection