..and make progress bar more accurate.
Use a spatial index to avoid comparing every feature to every other
feature, and only compare against features with intersecting bounding
boxes instead. Also optimise feature requests and loop logic.
Benchmarks:
Point layer, 6000k features
Before: 30 seconds
After: 0.15 seconds
Point layer, 45k features
Before: > 10 minutes
After: 7 seconds
Fixes#19973
Avoid conversion to/from WKB at OGR/QGIS side, and just directly
utilise OGR geometry API to construct QGIS geometries.
Shaves ~10% off rendering time for a large point layer (GPKG)
The issue was that during drag&drop, we first connect to layer's signal
for the second time, but then the disconnect() call on removal of the original
layer node would disconnect all connections (not just one). For that reason
now we only connect/disconnect when the layer is in the tree only once.
Fixes an unreported bug where it was possible to select a layer tree group
and remove even when it contained required layers.
When removing layers/groups, the following checks will now also recursively
test layers and not just directly selected layers:
- test for layers with unsaved changes
- test for layers with active tasks running in background
And require that showing help is opt-in. Apart from a handful
of built-in providers, most providers will not have help pages
available within the QGIS documentation (including model and
script algorithms). Accordingly, we should hide the help button
by default and only show it for these selected providers.
Note that 3rd party algorithms can still specify custom helpUrl
urls, in which case the button WILL be shown.
Also:
Thanks to @agiudiceandrea:
Fixes#19900
Statistics were erroneously computed on the dissolve field, rather than on the statistic attribute field as it should be.
Fixes#19307
Handle filenames with white spaces (in the same way as Buffer, OffsetCurve, OneSideBuffer, PintsAlongLines algs).
processing options are changed
Make sure the algorithm dialogs use their own copy of algorithms,
instead of the copies owned by the processing registry. Opening
processing options triggers a full reload of providers, deleting
all existing algorithm instances from the registry first.