QGIS Feature Selection – Selecting Features Visible in Map Extent Using QGIS

qgisqgis-modelerselect-by-expression

In QGIS, I'm trying to select all the features that are visible in my map extent but I can't find a solution with "select by expression" or something else.

I will use your tips inside modeler to make a buffer of 5 meters around my polygons, but only on those which are visible in my map extent.

Best Answer

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.