[Qgis-user] Dynamic Source Filtering in QGIS - How?
Stefan Keller
sfkeller at gmail.com
Sun May 4 03:59:45 PDT 2025
Many thanks for the tip, Harrissou. While I love e.g. data-driven
rule-based symbology geometry generators, I am really looking for a
solution that scales. And that means you want to filter the data close
to the source and not during rendering.
I would rather go in the direction that Chris has pointed out. For
example, he referred to this discussion
https://gis.stackexchange.com/questions/392447/filter-features-within-bounding-box-on-provider-side
.
I also looked at this plugin
https://plugins.qgis.org/plugins/qgis-subset-expression-plugin/ and
there's even a built-in xxx option as combined with PostgreSQL NOTIFY
https://gis.stackexchange.com/questions/336820/using-postgresql-notify-payload-in-qgis
.
I think I'm close to a solution using the "Filter" property of layers,
but it seems that this probably needs a QGIS patch to instruct the
layer to refresh/reload/recalculate the source. Many QGIS expression
variables are already available, such as
SELECT * FROM "castles_etc_ranked_osm_2025" WHERE "x" BETWEEN $x_min
AND $x_max AND "y" BETWEEN $y_min AND $y_max ORDER BY qrank DESC LIMIT
50;
or
SELECT * FROM "castles_etc_ranked_osm_2025" WHERE "x" BETWEEN
min_x(@map_extent) AND max_x(@map_extent) AND "y" BETWEEN
min_y(@map_extent) AND max_y(@map_extent) ORDER BY qrank DESC LIMIT
50;
--Stefan
P.S. For those who want to test it themselves: Here's the dataset with
the castles of Switzerland and the corresponding field qrank for their
ranking according to the worldwide QRank dataset:
https://drive.switch.ch/index.php/s/RsYy9oBxWfad1am
Am So., 4. Mai 2025 um 07:17 Uhr schrieb DelazJ <delazj at gmail.com>:
>
> Hello,
> Stefan, You wrote "display", and while it may be expensive, what about using a symbology, categorized or rule-based, in which your expression will do the job? I didn't look at the exact expression, but it will look for features that intersect the current canvas extent, sort and filter them using the arrays functions. The ones that don't meet the criteria will be applied no symbol.
>
> Regards,
> Harrissou
>
>
> Le 4 mai 2025 00:47:18 GMT+02:00, chris hermansen via QGIS-User <qgis-user at lists.osgeo.org> a écrit :
>>
>> Stefan and list,
>>
>>
>> On Sat, May 3, 2025, 11:53 Stefan Keller via QGIS-User <qgis-user at lists.osgeo.org> wrote:
>>>
>>> Dear all,
>>>
>>> I would like to display only say the 50 most important features of a
>>> layer in a QGIS project when I zoom out and in. Almost all features
>>> have an attribute qrank starting at NULL or 1, and the larger qrank
>>> is, the more "important" the object is. Here is a demo of the web app
>>> https://castle-map.infs.ch/
>>>
>>> You can set a filter by right-clicking on the layer, e.g. as follows:
>>> SELECT * FROM “castles_etc_ranked_osm_2025” ORDER BY qrank DESC LIMIT 50;
>>>
>>> The problem is that QGIS only applies this filter (and SQL) once (when
>>> setting up the filter). However, I want QGIS to update this filter and
>>> reapply it every time someone's zooming or panning.
>>>
>>> I have looked in vain at the options for “Update Layer with notify” in
>>> the layer menu in the “Display” tab. I also tried it with a view and
>>> the file manager, but without success.
>>>
>>> 1. Can QGIS be configured this way? E.g. with Dynamic Provider Filter Plugin?
>>> 2. I think a small Python script (QGIS Python Console) could be
>>> another solutions. But which signals would I need to intercept?
>>>
>>> Yours, Stefan
>>
>>
>> What if you turn off the cache? So that the query has to be re-evaluated on each draw?
More information about the QGIS-User
mailing list