Прямые линии от ярлыка до признака в QGIS?

11

Я пытаюсь пометить ряд точечных объектов, но из-за плотности точечных объектов мне придется отодвинуть метки от точечных объектов. Затем я хочу использовать простую прямую линию (не стрелку), чтобы показать, какая метка относится к какой точке.

Я использовал плагин «Easy Custom Labels», чтобы генерировать этикетки и перемещать их туда, куда я хочу. Но я не могу создать простую тонкую прямую линию между точкой и столом.

Лучшее, чего я достиг - это изменить «тип слоя символа» (слой «Метки»> «Свойства»> «Стиль») на «стрелка», снять флажок с «изогнутыми стрелками» и снять флажок «повторять стрелку на каждом сегменте». Затем задайте длину и толщину головки равными 0 и сделайте «ширину стрелки» и «ширину стрелки в начале» как можно более точными. Но это все еще создает короткую линию. Смотрите изображение А.

Я попытался установить «тип символа позже» на «простую линию», но это приводит к строкам с изломами / вершинами / углами в них. Смотрите изображение Б.

В идеале мне бы хотелось, чтобы между метками и объектом (как на рисунке A) были прямые линии, ширина которых аналогична ширине на изображении B.

Примеры двух типов маркировки

QGIS_Noob
источник

Ответы:

11

Вы можете использовать выражение для создания линии между меткой и геометрией

введите описание изображения здесь

Expresion:

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

И это должно привести к результату:

введите описание изображения здесь

Карлос Лопес Кинтанилья
источник
Просто примечание: если метки перемещаются вручную с помощью панели инструментов свойств меток, а положение сохраняется в проекте, переменные label_x, y изменяются на поля с именами "Additional_storage_labeling_positionx" и "Additional_storage_labeling_positiony".
Габриэль С.
1
Если вы разместите свою среднюю точку на 2 единицы на западе, как вы делаете здесь make_point(label_x -2,label_y), этикетки на западном побережье будут выглядеть забавно. Кроме того, работа в другом масштабе сделает это бесполезным. Было бы лучше установить эту точку относительно расстояния до вашей метки и относительного положения от вашего центроида.
Альберт
2

Ответ Карлоса делает горизонтально выровненного лидера на конце метки, хотя только на одну точку в геометрическом генераторе дают прямые линии. В моем примере я переместил метки вручную, используя панель инструментов меток в QGIS 3.0.3. Обратите внимание, что метод можно найти в вопросе 232709 .

Единственные изменения, которые мне нужно было сделать, это значения x, y в моем выражении:

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

Что касается самих линий лидеров, дерево символов выглядит так:

  • Заливка
    • Генератор геометрии
      • Линия
        • Маркерная линия
          • маркер
            • Простой маркер
          • Простая линия

Чтобы убедиться, что лидеры заканчиваются в центре меток, просто отредактируйте значения в метках, определяющих выравнивание данных, по центру по горизонтали и по половине для вертикали. Чтобы стилизовать линию так, как вам нужно, используйте простую линию, вложенную в линию маркера.

Габриэль С.
источник