Estás tratando de llamar a within
en una cadena que representa una capa, no su geometría. Pero de todos modos no funcionará así. De este modo, se etiquetaría/no se etiquetaría toda la característica, no los segmentos. Con within
etiquetaría la característica con " "
en caso de que toda la línea esté en el polígono. En caso de intersects
etiquetará la característica que de alguna manera interactúa con cualquier polígono.
Tal vez hay opción de cómo resolver esto con la expresión de Label with
pero creo que esto es primario para formatear el texto de la etiqueta para la característica, no para la colocación de la etiqueta. No he descubierto cómo dividir la geometría de la línea en esta expresión para el resultado deseado.
En QGIS 3.8, hay Geometry generator
en Colocación en las propiedades de las etiquetas. Con esto puede generar una nueva geometría de origen sólo para las etiquetas, en su caso líneas que no son polígonos de intersección. Las etiquetas se renderizan sólo sobre esta geometría (es decir, se suprime la renderización de etiquetas sobre polígonos):
if(
intersects(
$geometry,
aggregate('poly','collect',$geometry,intersects($geometry, geometry()))
),
difference(
$geometry,
aggregate('poly','collect',buffer($geometry,0.1),intersects($geometry, geometry()))
),
$geometry
)
Fíjese en el buffer
Esto da espacio alrededor del polígono para suprimir la representación de la etiqueta. Esto evita que las etiquetas largas se superpongan a los polígonos.
Que en Ficha de renderización compruebe el Label every part of multi-part features
. Esto mantiene la representación de etiquetas en toda la parte de una línea (líneas que se superponen al polígono y continúa).