Hi Cory,
Perhaps not exactly what you want - but did you also look at the point
cluster renderer?
If you use that, points are clustered at small map scales, but are shown
individually if you zoom in further.
It might help a bit in your situation.
Andreas
On 2021-02-02 17:20, Cory Albrecht wrote:
Hello all,
I am looking for a way to control symbol rendering in a way similar to
how labels are omitted ot not to prevent collision.
I want to use the GeoNames data to populating cities, towns, etc... on
my maps, but there are still millions of points even after filtering
for populated places. This is what a section of the map from
Dakotas/Montana/Wyoming looks like now, with a confused mess of
overlapping symbols. It's worse on the coasts. BTW, this layer is a
points layer.
First I thought maybe Scale-based rendering by population size, but
that doesn't work, because farther out zoom levels there'd still be a
mess of overlapping symbols in heavily populated places like NYC or LA,
and in less populated places the smaller cities and towns that are
important wouldn't even show (like that black dot, which is Rapid City,
SD) even though there would be plenty of room for them.
I can control the rendering order based on population size, so is there
a way to control whether a not a symbol gets rendered based on what has
already been drawn, but ignoring what has yet to be rendered?
I'm imagining a set of stops similar to this:
* iterate through all items in order of the population attribute
* get the current item's location where it would potentially be
rendered on the map
* has anything been rendered already within 5mm (or whatever) of that
location?
* if yes, go to next item without rendering this one
* if no, then render it's symbol
* continue to next item
So after that dot which is Rapid City gets rendered, but then those
overlapping circles do not until you finally get to one with a centre
5mm away from the centre of the Rapid City dot.
While googling I found the refFunctions plugin which adds some
functions dealing with overlaps, but since the layer is composed of
points, nothing really overlaps. Also, adding something like `_...AND
(population >= array_max(geomoverlaps('cities','population')))_` to a
rule in Symbology to exclude/include things for rendering looks at
everything without distinguishing between already rendered and yet to
be rendered, like I need.
Am I thinking about this wrong and am thus missing something obvious? I
know I only use a small portion of QGIS's capabilites, so maybe there's
a tool/capability I haven't discovered yet because I haven't needed it
until now?
The layer is a PostGIS layer and this would seem to be a wholly QGIS
problem, but maybe I am wrong on that, too? Maybe there's a way of
passing the map scale in the SQL query ('SELECT *, 1.0 as map_scale
FROM...') so that some weird WHERE clause would do the filtering there?
That seems unlikely and a bit crazy, but who knows?
_______________________________________________
Qgis-user mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
_______________________________________________
Qgis-user mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user