Страница 1 из 1

Максимальное значение длины без списка (python + QGIS)

Добавлено: 07 сен 2012, 15:59
SS_Rebelious
Пытаюсь получить максимальное значение длины линии, пересекающей полигон (переменная width).

Такой код работает:

Код: Выделить всё

  width_list = []
while y_init <= Y2:
x_new = x_init + dx
y_new = y_init - dy
A = QgsPoint(x_init, y_init)
B = QgsPoint(x_new, y_new)
m_line = QgsGeometry.fromPolyline( [ A, B ] )
intersec = m_line.intersection(polygon)
current_width = intersec.length()
width_list.append(current_width)
y_init = y_init + step
width = max(width_list)
return width


Однако, я хотел бы обойтись без списка, чтобы меньше загружать оперативку. Такой вариант, например, не работает:

Код: Выделить всё

  width = 0
while y_init <= Y2:
x_new = x_init + dx
y_new = y_init - dy
A = QgsPoint(x_init, y_init)
B = QgsPoint(x_new, y_new)
m_line = QgsGeometry.fromPolyline( [ A, B ] )
intersec = m_line.intersection(polygon)
current_width = intersec.length()
if current_width > width:
width = current_width
else:
pass
y_init = y_init + step
return width


Как обойтись без списка?

Re: Максимальное значение длины без списка (python + QGIS)

Добавлено: 07 сен 2012, 16:56
Denis Rykov
А значение width изначально инициализировано? что именно не работает, выдаёт неверный результат?

Re: Максимальное значение длины без списка (python + QGIS)

Добавлено: 07 сен 2012, 18:09
SS_Rebelious
Во втором варианте ничего не выдаётся в принципе. Мне кажется, проблема заключается в том, что сравнение значения, выдаваемого length() со значением width по каким-то причинам не происходит.

Сейчас я использую такой костыль. Cоздаю width_list, но сразу после добавления в него значения выдёргиваю последнее с помощью pop(0) и сравниваю его с width. Cравнение в таком случае происходит нормально и я получаю результат.

Код: Выделить всё

  width_list = []
width = 0
while y_init <= Y2:
x_new = x_init + dx
y_new = y_init - dy
A = QgsPoint(x_init, y_init)
B = QgsPoint(x_new, y_new)
m_line = QgsGeometry.fromPolyline( [ A, B ] )
intersec = m_line.intersection(polygon)
current_width = intersec.length()
width_list.append(current_width)
w = width_list.pop(0)
if w > width:
width = w
else:
pass
y_init = y_init + step
return width