Тот, кто может помочь. я просто хочу добавить направление (азимут: т.е. N 25 35 E) и расстояние (длина: 125 метров) в качестве моего нового поля в полилинии / линейных данных. есть ли плагин для генерации этих полей? Я попытался использовать «экспорт / добавить столбцы геометрии» в моих данных линии, но было добавлено только значение «Длина».
18
Ответы:
Вы можете рассчитать направление в Калькуляторе поля в QGIS. Это работает в UTM (метрических) координатах на небольших расстояниях (сотни километров), но что-то более сложное потребуется для больших расстояний или для десятичных градусов.
Откройте таблицу атрибутов для линейного слоя, переключите редактирование и нажмите кнопку «Калькулятор поля», чтобы открыть диалоговое окно:
Создайте новое поле как десятичное с точностью 1 или 2.
Вставьте этот код в поле «Выражение» и нажмите «ОК»:
(atan((xat(-1)-xat(0))/(yat(-1)-yat(0)))) * 180/3.14159 + (180 *(((yat(-1)-yat(0)) < 0) + (((xat(-1)-xat(0)) < 0 AND (yat(-1) - yat(0)) >0)*2)))
Первая часть вычисляет обратный тангенс разностей x и y и преобразует его в градусы (180 / pi). Вторая часть добавляет либо 180, либо 360 к результирующей фигуре, чтобы получить угол наклона 0-360 °.
источник
Вам не нужен плагин. Все в классе QgsPoint от PyQGIS
Если вы изучите содержимое класса точек QGIS с помощью встроенной функции Python dir () в консоли Python.
Вы можете видеть, что есть функции азимута и sqrDist и после нескольких попыток:
Проблема
Так в консоли Python
теперь xy содержит все узлы (точки) линии
Используя все точки узла линии:
1) азимут от точки i до точки i + 1 (+/- 180 °) (узлы линии)
2) евклидово расстояние между точкой i и точкой i + 1
После этого не очень сложно добавить эти значения в таблицу атрибутов.
Я использую эту технику для анализа линеаментов (геологии) с помощью matplotlib и плагина Script Runner.
источник
Решение, предоставленное @Simbamangu, довольно эффективно, но не охватывает все случаи. Например, применение формулы с горизонтальным смещением приведет к ПУСТО (NULL) результату, поэтому вы должны использовать эту формулировку в Калькуляторе полей QGIS.
источник