[Qgis-user] Label Visibility

Springfield Harrison stellargps at gmail.com
Wed Apr 14 07:48:37 PDT 2021


Charles, thanks very much.  This looks promising.

I'm out all  day but will check it later and advise . . . . .

-----
Cheers, Spring



On 14/Apr/2021 07:34, Charles Dixon-Paver wrote:
> If you want the layer dependant label visibility to be applied to the 
> entire layer, then indeed using an expression in the "Show label" 
> rendering option should do what you are asking. By the sounds of 
> things though, you should probably just be using a simple expression 
> like:
>
> if (is_layer_visible( 'toggle_layer_name' ), 1, 0)
>
> Invert it to only display the labels when a certain layer is /not/ 
> visible by simply switching the true/ false statement order, e.g. if 
> (is_layer_visible( 'toggle_layer_name' ),false,true)
>
> If you are wanting the behaviour to be applied to a specific rule you 
> can specify a similar context within the rule using an expression like 
> if (is_layer_visible( 'toggle_layer_name' ),{expression when true}, false)
>
> Note, however, that although the map canvas will automatically toggle 
> the display of the visible layers, it probably isn't going to 
> automatically update the label rendering... So even with these 
> expressions working properly you may have to refresh the map or pan a 
> little to check that it's working after changing the layer visibility. 
> As I'm sure you can imagine, labeling can be quite a computationally 
> expensive resource so there are likely very good reasons for this 
> behaviour, although you can probably work around it using some python 
> code or similar. An example might be the following:
>
> def redrawWhenToggled(layerTreeNode):
>     canvas = iface.mapCanvas()
>     canvas.redrawAllLayers()
>
> toggle_layer = 
> QgsProject.instance().layerTreeRoot().findLayer('toggle_layer_name_76f7c585_xxxxx')
> toggle_layer.visibilityChanged.connect(redrawWhenToggled)
>
> That should redraw the canvas each time you toggle the visibility on 
> that particular layer. Note that 'toggle_layer_name_76f7c585_xxxxx' is 
> of course the layerID. You can easily get the layer id by selecting/ 
> highlighting the item in the layers tab and using 
> iface.activeLayer().id() in the python console.
>
> I would probably also use a layer id, rather than a name, in the 
> "is_layer_visible" expression, so that the expression continues to 
> work even when a layer is renamed or duplicated etc.
>
> On Tue, 13 Apr 2021 at 23:27, Springfield Harrison 
> <stellargps at gmail.com <mailto:stellargps at gmail.com>> wrote:
>
>     Hello Folks, back again!
>
>     I'm trying to have labels display only when that "layer" is turned
>     on (visible).  BUT my layers are actually rule based symbology and
>     apply only to selected records in the layer (as per the rules),
>     (sub-layers?).
>
>     Under the Rendering tab for labels I find:
>
>     /With data-defined expressions in//Show label//and//Always
>     Show//you can fine tune which labels should be rendered./
>
>     but there is no explanation of how to implement this feature.
>
>     I would expect that something like this may be in the right
>     direction:
>
>     /if (is_layer_visible( @layer_name ) = 0,  ("Tree_Tag" ||  ' - '
>     || ' (' ||   "More"   || ') ') , '*')/
>
>     Any thoughts on how to selectively make labels visible would be great.
>
>     -----
>     Cheers, Spring
>
>
>
>     _______________________________________________
>     Qgis-user mailing list
>     Qgis-user at lists.osgeo.org <mailto:Qgis-user at lists.osgeo.org>
>     List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>     Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20210414/9ff4b3e2/attachment.html>


More information about the Qgis-user mailing list