Когда точки перекрываются, есть это свойство, которое позволяет автоматически отображать их множество отдельно, где они находятся, и называется «Смещение точек». Но это не работает для линий, даже если это кажется мне вполне концептуально выполнимым для достижения чего-то подобного:
Мне абсолютно необходимо увидеть различия линий, которые на самом деле все находятся в одном месте (я работаю в телекоммуникационных сетях). Единственный способ, которым я сейчас покажу, - это действительно создавать разные линии, как на картинке выше, создавая пространственные ошибки.
Я использую QGIS 2.14.
qgis
symbology
style
visualisation
qgis-custom-function
GuiOm Clair
источник
источник
Ответы:
Я предлагаю подход, который повторяется только к генератору геометрии и пользовательской функции.
Прежде чем начать, я хочу подчеркнуть, что я сосредоточу внимание на объяснении минимальных действий, которые необходимо выполнить для воспроизведения желаемого результата: это означает, что некоторые другие второстепенные параметры (такие как размеры, ширина и т. Д.) Должны быть легко настроены вами для лучшего соответствия вашим потребностям.
Следовательно, это решение работает как для географических, так и для проектируемых эталонных систем: в дальнейшем я предполагал использовать прогнозируемый CRS (т.е. единицы измерения - метры), но вы можете изменить их в соответствии со своим CRS.
контекст
Давайте начнем с этого векторного слоя строк, представляющего провода (метки обозначают количество перекрывающихся (совпадающих) проводов):
Решение
Сначала перейдите,
Layer Properties | Style
а затем выберитеSingle symbol
средство визуализации.В
Symbol selector
диалоговом окне выберитеGeometry generator
тип слоя символа иLinestring / MultiLinestring
тип геометрии. Затем нажмите наFunction Editor
вкладку:Затем нажмите
New file
и введитеdraw_wires
имя новой функции:Вы увидите, что была создана новая функция, и она указана в левой части диалога. Теперь нажмите на название функции и замените значение по умолчанию
@qgsfunction
следующим кодом (не забудьте добавить все библиотеки, прикрепленные здесь):Как только вы это сделаете, нажмите на
Load
кнопку, и вы сможете увидеть функцию изCustom
менюExpression
диалогового окна.Теперь введите это выражение (см. Изображение ниже в качестве ссылки):
Вы только что запустили функцию, которая воображаемым образом говорит:
Единственное, что вам нужно изменить - это значение первых двух параметров, как вы хотите, но, очевидно, разумным образом (оставьте остальные параметры функции как есть).
Наконец, нажмите на
Apply
кнопку для применения изменений.Вы увидите что-то вроде этого:
как и ожидалось.
РЕДАКТИРОВАТЬ
Согласно конкретной просьбе, поднятой ФП в комментарии:
Я слегка отредактировал код. Следующая функция должна вернуть ожидаемый результат:
источник
layer=iface.activeLayer()
и затемprint layer.wkbType()
. НажмитеRun
: какое значение печатного номера?