Bug report #10338
inverted polygon symbology wrongly handles overlapping polygons
Status: | Closed | ||
---|---|---|---|
Priority: | Severe/Regression | ||
Assignee: | - | ||
Category: | Symbology | ||
Affected QGIS version: | master | Regression?: | No |
Operating System: | Easy fix?: | No | |
Pull Request or Patch supplied: | Yes | Resolution: | |
Crashes QGIS or corrupts data: | No | Copied to github as #: | 18759 |
Description
Right now, the inverted polygon symbology appears to add polygons using a symmetrical difference method, resulting in a mishandling of overlapping polygons.
Basically right now when polygons overlap, the overlapping area is covered by symbology (i.e. considered as having no polygon underneath it). Overlapping polygons should result in merged area that isn't filled by the inverted polygon symbology.
See attached project, easier to understand through looking at it :)
Flagging this as blocker as IMO this needs fixing before releasing the feature to the public.
History
#1 Updated by Hugo Mercier over 10 years ago
No particular spatial operations are done on the polygons. They are only surrounded by a big square polygon. The 'inversion' effect is done by the rendering pipeline, through QPainter operations. It is by default using the even-odd filling rule, which explains what you see.
The other rule (non-zero winding) could resolve the issue, but if and only if we send polygons to the QPainter pipeline with consistent orientations (exterior rings always in the same orientation - cw or ccw).
(see http://en.wikipedia.org/wiki/Nonzero-rule)
An alternative would be to add a spatial operation of merging, but from what I already tested, it was very slow and too strict (what to do when geometries are invalid ?) when using GEOS-based primitives.
#2 Updated by Mathieu Pellerin - nIRV over 10 years ago
Ok. I'm pretty clueless about the mechanics of it all, but the current behavior definitely needs fixing when it comes to this specific overlapping polygon scenario.
#3 Updated by Hugo Mercier over 10 years ago
Ok, after some experiments with QPainter, it appears the filling rules won't solve this problem easily.
So I think you would have to rely on some spatial preprocessing (union).
I would prefer to have this as an option, since it requires some computations and may return blank polygons when the union is not doable (when the input polygons are invalid are when the on-the-fly simplification gives invalid polygons).
#4 Updated by Hugo Mercier over 10 years ago
- Pull Request or Patch supplied changed from No to Yes
Fix submitted
https://github.com/qgis/QGIS/pull/1393
It adds an option for the use of a spatial union
#5 Updated by Martin Dobias over 10 years ago
- Status changed from Open to Closed
Fixed in changeset 3fe12df5077de36005d2a4550310b6dc08fc9757.