Cuando los puntos se superponen, existe esta propiedad que permite mostrar automáticamente el lote de ellos por separado alrededor de donde están, llamado 'desplazamiento de punto'. Pero no funciona para líneas, aun así me parece bastante factible conceptualmente para lograr algo así:
Necesito absolutamente ver las diferentes líneas que en realidad están todas en el mismo lugar (estoy trabajando en redes de telecomunicaciones). La única forma en que veo por ahora es crear realmente diferentes líneas como en la imagen de arriba, creando así errores espaciales.
Estoy usando QGIS 2.14.
qgis
symbology
style
visualisation
qgis-custom-function
GuiOm Clair
fuente
fuente
Respuestas:
Propongo un enfoque que solo recurre a un generador de geometría y una función personalizada.
Antes de comenzar, quiero subrayar que enfocaré la atención en la explicación de las cosas mínimas para reproducir el resultado deseado: esto significa que usted debe ajustar fácilmente otros parámetros menores (como tamaños, anchos, etc.) para satisfacer mejor sus necesidades.
Por lo tanto, esta solución funciona tanto para los sistemas de referencia geográficos como proyectados: en lo siguiente, supuse que usaría un CRS proyectado (es decir, las unidades de medida son metros), pero puede cambiarlos de acuerdo con su CRS.
Contexto
Asumamos comenzar desde esta capa de vector de cadena lineal que representa los cables (las etiquetas representan el número de cables superpuestos (coincidentes)):
Solución
En primer lugar, vaya a
Layer Properties | Style
y luego elija elSingle symbol
renderizador.En el
Symbol selector
cuadro de diálogo, elija unGeometry generator
tipo de capa de símbolo y unLinestring / MultiLinestring
tipo de geometría. Luego, haga clic en laFunction Editor
pestaña:Luego, haga clic en
New file
y escribadraw_wires
como el nombre de la nueva función:Verá que se ha creado una nueva función y está listada en el lado izquierdo del cuadro de diálogo. Ahora, haga clic en el nombre de la función y reemplace el predeterminado
@qgsfunction
con el siguiente código (no olvide agregar todas las bibliotecas adjuntas aquí):Una vez que haya hecho esto, haga clic en el
Load
botón y podrá ver la función desde elCustom
menú delExpression
cuadro de diálogo.Ahora, escriba esta expresión (vea la imagen a continuación como referencia):
Acaba de ejecutar una función que dice, de forma imaginaria:
Lo único que necesita cambiar es el valor de los dos primeros parámetros que desee, pero obviamente de manera razonable (deje los otros parámetros de función como se proporcionan).
Finalmente, haga clic en el
Apply
botón para aplicar los cambios.Verás algo como esto:
como se esperaba.
EDITAR
Según una solicitud específica planteada por el OP en un comentario:
Edité ligeramente el código. La siguiente función debería devolver el resultado esperado:
fuente
layer=iface.activeLayer()
y luegoprint layer.wkbType()
. Haga clicRun
: ¿cuál es el valor del número impreso?