The trick is to create a function that access QGIS graphical interface, and that is piped to the query of the select by expression
.
- Open a function editor (from anywhere, including from field calculator) and create a new function that reads the canvas extent and returns it as a geometry.
from qgis.core import *
from qgis.gui import *
from qgis.utils import iface
@qgsfunction(args='auto', group='Custom')
def currentExtent(feature, parent):
return QgsGeometry.fromRect(iface.mapCanvas().extent())
- Open the
select by expression
and useintersects($geometry,currentExtent())
(orwithin(..)
for entirely contained polygons)
The same function can be used in a virtual layer as shown here, that you could eventually modify to compute the buffer.