No creo que esto sea posible ya que el QgsFeatureRequest() debe utilizar un cuadro delimitador especificado si desea añadir un filtro espacial. Un método de ejemplo es QgsFeatureRequest().setFilterRect(boundingBox)
. El ExactIntersect
utiliza la geometría real de la característica para la intersección, pero se utilizará contra el cuadro delimitador.
El siguiente es un ejemplo de uso de QgsFeatureRequest()
donde la geometría de cada línea se cruza con la caja delimitadora de cada polígono:
polygon_lyr = QgsProject.instance().mapLayersByName('polygon example')[0]
line_lyr = QgsProject.instance().mapLayersByName('line example')[0]
ids = []
for i, poly in enumerate(polygon_lyr.getFeatures()):
poly_geom = poly.geometry()
request = QgsFeatureRequest().setFilterRect(poly_geom.boundingBox()).setFlags(QgsFeatureRequest.ExactIntersect)
for line in line_lyr.getFeatures(request):
ids.append(line.id())
line_lyr.selectByIds(ids)
Si quieres hacer una intersección usando las geometrías de las líneas contra las geometrías de los polígonos, podrías hacerlo más directamente usando:
polygon_lyr = QgsProject.instance().mapLayersByName('polygon example')[0]
line_lyr = QgsProject.instance().mapLayersByName('line example')[0]
ids = []
for i, poly in enumerate(polygon_lyr.getFeatures()):
poly_geom = poly.geometry()
for line in line_lyr.getFeatures():
if line.geometry().intersects(poly_geom):
ids.append(line.id())
line_lyr.selectByIds(ids)