Я использую QGIS 2.18. Мне нужно создать секторные огни для навигационных целей на карте.
У меня есть данные светлого сектора в виде полей, дающих becon_id, начальную степень, конечную степень и цвет в шейп-файле с более чем 500 буями, маяками и маяками, которые должны быть показаны на карте. Для каждого маяка может быть много строк, каждая из которых описывает один светлый сектор (например, белый сектор)
Конечный результат должен выглядеть примерно так: Светлые сектора правильных цветов, цвет которых отмечен как символ в цветовом поле (RGW), и пунктирные линии на расстоянии от 100 м до 1000 м от буя / маяка / маяка.
Скорее всего, он должен быть создан как символ на основе правил, но мне нужен Python?
Ниже приведен пример данных шейп-файла для маяка (к сожалению, не приведенного выше), который имеет зеленый сектор между 114 и 154 градусами, белый сектор между 154 и 168 градусами, красный сектор между 168 и 237 градусами, зеленый сектор между 237 и 314 градусами, белый сектор между 314 и 320 градусами, красный сектор между 320 и 337 градусами (по некоторым причинам, 0 не север, а юг):
Ответы:
РЕДАКТИРОВАТЬ Я отредактировал ответ для управления конкретными ситуациями (из-за определенных значений углов) и для того, чтобы не отображать пунктирные линии, когда задан круглый угол.
Я предлагаю решение, только возвращаясь к символике и маркировке на основе правил.
Прежде чем начать, я хочу подчеркнуть, что я сосредоточу внимание на объяснении минимальных действий, которые необходимо выполнить для воспроизведения желаемого результата: это означает, что некоторые другие второстепенные параметры (такие как размеры, ширина и т. Д.) Должны быть легко настроены вами для лучшего соответствия вашим потребностям.
Кроме того, это решение работает только в том случае, если вы предполагаете, что
0
градус - это север, а не юг (вместо этого, если бы0
юг, было бы достаточно суммировать180
значение каждый раз, когда в формулах, которые имеют дело с углами, напримерcos(radians(90))
, стало бы, становится равным «90»cos(radians(180 + 90))
). Я предпочел сделать это только ради более общего решения.стайлинг
Мы будем отображать точки с помощью a
Single symbol
и возвращаясь к одномуSimple Marker
и тремGeometry generator
слоям символов:В дальнейшем объяснении я буду следовать тому же порядку символов на изображении выше.
1) Простой маркер
Я выбрал символ по умолчанию для черной звезды (это самая простая часть этого урока), имеющий размер 3 мм и ширину 0,4 мм.
2) Генератор геометрии № 1
Добавьте новый слой символов и выберите
Geometry generator
тип:Вставьте это выражение в
Expression
поле:Мы только что определили первую линию, которая указывает на точку, откуда начинается световой сектор. Длина этой линии составляет 1000 м, и она создается только в том случае, если угол открытия секторного источника света не является круглым (это происходит во избежание того, чтобы линия разорвала целый круг).
3) Генератор геометрии № 2
То же, что и выше, но на этом этапе вам нужно использовать это выражение:
Мы только что определили первую линию, которая указывает на точку, где световой сектор заканчивается. Длина этой линии составляет 1000 м, и она создается только в том случае, если угол открытия секторного источника света не является круглым (это происходит во избежание того, чтобы линия разорвала целый круг).
4) Генератор геометрии № 3
Вставьте это выражение в
Expression
поле:Мы только что определили дугу между начальной и конечной точками легкого сектора (обратите внимание, что
2000
это произвольное значение, потому что я пытаюсь создать многоугольник, который пересекается с границей круга, имеющего радиус 900 м).Кроме того, нам нужно установить цвет, который хранится в
"VARIS"
поле. Для этого нам нужно указать это с помощью специального выражения. Следуйте стрелке на изображении ниже:а затем введите это выражение после нажатия на
Edit...
кнопку:Обратите внимание, что для этого слоя символов я создал две строки: верхняя строка определяет используемый цвет (на самом деле я установил собственное выражение для этого), а нижняя полезна для определения черной рамки (она будет иметь ширина, превышающая ширину верхней линии). Не забудьте также установить
Flat
какCap style
для обеих линий, чтобы избежать любого наложения цвета.этикетирование
1) Установка меток
Перейдите к
Layer Properties
>Labels
и, как обычно, следуйте красным стрелкам:а затем введите это выражение:
Мы только что определили правило цвета, используя значение, сохраненное в
"VARIS"
поле.2) Настройка размещения ярлыков
Выберите
Placement
опцию вLabels
меню и выберитеOffset from point
.Затем со ссылкой на изображение ниже:
следуйте за красной стрелкой и напечатайте это выражение:
Затем следуйте зеленой стрелке и введите это выражение:
Конечный результат
Если вы правильно выполнили предыдущие задачи, вы сможете получить такой результат:
бонус
Поскольку второстепенных параметров было слишком много для того, чтобы полностью охватить этот ответ, я прикрепил стиль здесь : вы можете открыть этот код в любом текстовом редакторе и сохранить его как файл стиля слоя QGIS (т.е. с
.qml
расширением).Приведенный выше стиль был создан с использованием QGIS 2.18.4 (он должен иметь то же имя используемого вами шейп- файла ).
источник