Skip to main content
3 of 3
deleted 4 characters in body
PolyGeo
  • 65.4k
  • 29
  • 114
  • 345

The trick is to create a function that access QGIS graphical interface, and that is piped to the query of the select by expression.

  1. 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())
  1. Open the select by expression and use intersects($geometry,currentExtent()) (or within(..) 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.

JGH
  • 43.1k
  • 3
  • 46
  • 93