¿Líneas rectas desde la etiqueta hasta la función en QGIS?

11

Lo que intento hacer es etiquetar una serie de entidades de puntos, pero debido a la densidad de las entidades de puntos, tendré que alejar las etiquetas de las entidades de puntos. Luego quiero usar una línea recta simple (no una flecha) para mostrar qué etiqueta se refiere a qué punto.

He utilizado el complemento "Etiquetas personalizadas fáciles" para generar las etiquetas y moverlas a donde las quiero. Pero lo que no puedo hacer es crear una línea recta delgada y simple entre el punto y la tabla.

Lo mejor que he logrado es cambiar el "tipo de capa de símbolo" (Capa de etiquetas> Propiedades> Estilo) a "flecha", desmarcar "flechas curvas" y desmarcar "repetir flecha en cada segmento". Y luego haga que la longitud y el grosor de la cabeza sean 0 y haga que el "ancho de flecha" y el "ancho de flecha al inicio" sean lo más posible. Pero esto todavía crea una línea gruesa. Ver imagen A.

He intentado establecer el "tipo de símbolo posterior" en "línea simple", pero esto da como resultado líneas con torceduras / vértices / esquinas en ellos. Ver imagen B.

Idealmente, me gustaría tener líneas rectas entre las etiquetas y la entidad (como en la imagen A) que tengan un ancho similar al de la imagen B.

Ejemplos de dos tipos de etiquetado.

QGIS_Noob
fuente

Respuestas:

11

Puede usar una expresión para crear una línea entre la etiqueta y la geometría

ingrese la descripción de la imagen aquí

Expresión:

CASE 
 WHEN (label_x IS NOT NULL AND label_y IS NOT NULL) THEN
  make_line(centroid($geometry),make_point(label_x -2,label_y), make_point(label_x ,label_y))
ELSE
  NULL
END

Y este debería ser el resultado:

ingrese la descripción de la imagen aquí

Carlos López Quintanilla
fuente
Solo una nota al margen, si las etiquetas se mueven manualmente usando la barra de herramientas de propiedades de etiquetado y la posición se almacena en el proyecto, las variables label_x, y cambian a campos llamados "auxiliary_storage_labeling_positionx" y "auxiliary_storage_labeling_positiony".
Gabriel C.
1
Al colocar las unidades del punto medio 2 hacia el oeste como lo hace aquí make_point(label_x -2,label_y), las etiquetas en la costa occidental se verán divertidas. Además, trabajar a una escala diferente hará que esto sea inútil. Sería mejor establecer este punto en relación con la distancia a su etiqueta y la posición relativa desde su centroide.
Albert
2

La respuesta de Carlos hace que un líder alineado horizontalmente en el extremo de la etiqueta, aunque solo un punto menos en el generador de geometría dé líneas rectas. En mi ejemplo, moví las etiquetas manualmente usando la barra de herramientas de etiquetado en QGIS 3.0.3. Tenga en cuenta que la técnica se puede encontrar en la pregunta 232709 .

Los únicos cambios que necesitaba hacer son los valores x, y en mi expresión:

CASE
   WHEN ("auxiliary_storage_labeling_positionx" IS NOT NULL AND "auxiliary_storage_labeling_positiony" IS NOT NULL) THEN
        make_line(centroid($geometry),make_point("auxiliary_storage_labeling_positionx","auxiliary_storage_labeling_positiony"))
   ELSE
      NULL
END

En cuanto a las líneas del líder, el árbol de simbología es así:

  • Llenar
    • Generador de geometría
      • Línea
        • Línea de marcador
          • Marcador
            • Marcador simple
          • Linea simple

Para asegurarse de que los líderes terminen en el centro de la etiqueta, simplemente edite los valores en la alineación definida de datos de las etiquetas en 'Centro' para horizontal y 'Mitad' para vertical. Para diseñar la línea a lo que necesite, use la línea simple anidada en la línea del marcador.

Gabriel C.
fuente