In QGIS, take a polygon grid (named
'grid') and a multipolygon layer (named
For each feature in surfaces, I want to union all features of the grid that are disjoint (not intersected) with. I need to do this with a virtual layer (datasets regularly updated and exported with an atlas).
I have tried this two solutions, they work but are extremely slow (4-5 minutes):
select s.id, st_union(g.geometry) from grid g, surfaces s where not(st_intersects(g.geometry,s.geometry)) -- st_dissolve also works but is slower... group by s.id
select s.id, st_union(g.geometry) from grid g join surfaces s on not(st_intersects(g.geometry,a.geometry)) -- st_dissolve also works but is slower... group by s.id
The problem seems to be the
intersects. The time is about the same with or without
For testing, I tried to add a rule-based symbology to my grid, with this rule:
not(intersects($geometry, @atlas_geometry ))
And I get the result instantly. Why intersects is slow on the Virtual Layer and fast in symbology? And how can I get a fast result in the Virtual layer?
What I want to achieve (without union to see the grid):
And with union, to calculate the area of each part of the grid:
'surfaces'layers? What are the technical characteristics of your system?
'surfaces'and show the empty spaces symbolized by the grid - and calculate area for each.