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

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 07 сен 2012, 15:59

Пытаюсь получить максимальное значение длины линии, пересекающей полигон (переменная 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


Как обойтись без списка?
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 07 сен 2012, 16:56

А значение width изначально инициализировано? что именно не работает, выдаёт неверный результат?
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 07 сен 2012, 18:09

Во втором варианте ничего не выдаётся в принципе. Мне кажется, проблема заключается в том, что сравнение значения, выдаваемого 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
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя