Я хочу получить список последовательных сегментов, которые являются частями линейной строки (QGIS, Shapefile) и создать почти прямой участок линейной строки.
В данный момент я могу вычислить азимут сегментов и поместить их в список.
az_list = [260,263,260,209,245,339,337,343]
Поэтому сначала я подумал о том, чтобы заполнить новый список элементами az_list
, пока дисперсия не станет слишком высокой.
Пример:
Первые три значения az_list
260, 263, 260 образуют почти прямой участок линии. Я проверяю дисперсию этих трех значений с помощью:
import numpy as np
np.var([260, 263, 260]) # result: 2.0
И для последних трех:
np.var([339,337,343]) # result: 6.22...
Зная это, я мог бы определить, что для дисперсии var
сечение является прямым, когда var > 0
и var < 10
и если список пуст (что будет отправной точкой) math.isnan(np.var(az_list))
возвращает False
.
Я начинаю помещать первые три значения из az_list
в новый список straight_list
. С помощью этого кода я попытался запустить его, но он возвращает пустой список.
straight_list = []
while not math.isnan(np.var(straight_list)) and np.var(straight_list) != 0 and np.var(straight_list) < 10:
for i in az_list:
straight_list.append(i)
Наконец-то возникает желание получить список списка, в котором хранятся прямые секции, например:
straight_list = [[260,263,260],[339,337,343]]