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 | Styley luego elija elSingle symbolrenderizador.En el
Symbol selectorcuadro de diálogo, elija unGeometry generatortipo de capa de símbolo y unLinestring / MultiLinestringtipo de geometría. Luego, haga clic en laFunction Editorpestaña:Luego, haga clic en
New filey escribadraw_wirescomo 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
@qgsfunctioncon el siguiente código (no olvide agregar todas las bibliotecas adjuntas aquí):Una vez que haya hecho esto, haga clic en el
Loadbotón y podrá ver la función desde elCustommenú delExpressioncuadro 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
Applybotó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?