Tengo una capa de línea y una capa de polígono en QGIS:
Me gustaría diseñar la parte de la capa de línea fuera del polígono usando un estilo y la parte dentro usando un estilo diferente:
No quiero crear un conjunto de datos derivados, ej. recorta la capa de línea y dale estilo a las dos partes.
Este es un caso simple, pero en mi proyecto QGIS tengo +30 capas, por lo que creo que cualquier combinación de capas perturbaría las capas subyacentes.
¿Es posible hacer algo como esto?
No quiero mostrar la capa de polígono, solo está aquí para visualizar lo que me gustaría hacer.
Respuestas:
No es una solución perfecta, pero podría utilizar el Geometry Generator que agrega una línea visualizada para representar la intersección. Luego puede configurar esto para superponer la función de línea original.
Agregue una nueva capa de símbolo haciendo clic en el signo más y seleccione el
Geometry generator
tipo de capa como símbolo. Establezca el tipo de geoemtry enLineString / MultiLineString
y use la siguiente expresión:Debería agregar detalles sobre su polígono específico donde:
polygonLayer
es el nombre de tu capa de polígonofieldName
es el nombre del campovalue
es el valor de la característica de su polígono específicoTenga en cuenta que para colorear la línea visual, es posible que deba hacerlo desde la propiedad Dibujar efectos :
Este fue el resultado (tenga en cuenta que la línea visual no se superponía completamente con la línea original, por lo que modifiqué ligeramente el desplazamiento):
Y sin el polígono:
Editar:
Si desea que esto se aplique para cada entidad de línea que se cruza con una entidad poligonal, vaya al Editor de funciones y use la siguiente función (cambie el nombre de
polygon example_2
para que coincida con el nombre de su capa de polígono):Haga clic en Cargar , vaya a la pestaña Expresión y escriba
func()
. Esperemos que el resultado sea similar al siguiente (usando las mismas propiedades de estilo mencionadas anteriormente):fuente
get_feature
requiere un nombre y un valor de campo. Solo tengo una capa de polígono y me gustaría usar todas las características en esa capa para enmascarar. ¿Es eso posible?Geometry Generator
sefunc
llama al método para cada entidad en la capa donde se usa para diseñar? Entonces, si mi capa de línea tiene 3 características, ¿func
se llama 3 veces y dibuja el mismo resultado 3 veces?func
ahora solo debería llamarse por cada entidad de línea y solo dibujará el resultado una vez (que parece ser el caso, como lo muestran los marcadores de vértice dentro de los polígonos, antes de que esto se ocultara debajo de lo que me perdí). Gracias por señalar esto :)Ampliando la respuesta de Joseph , se me ocurrió esta función. Da cuenta de diferentes sistemas de coordenadas y necesitaba buscar en dos capas de enmascaramiento, por lo que también lo maneja. Además, quería poder enmascarar las líneas dentro de los polígonos o las líneas fuera de los polígonos.
Este ejercicio me ha demostrado que QGIS no es muy aficionado a trabajar con grandes conjuntos de datos y este algoritmo con QGIS se bloquea en mi camino con demasiada frecuencia. Sospecho que al renderizador QGIS no le gusta renderizar generadores de geometría que requieren mucho tiempo.
fuente