Сообщение
SS_Rebelious » 17 сен 2012, 17:19
Думаю, это просто недоработка, когда проглядели частный случай. С точки зрения частной реализации алгоритма отсечения такое поведение может быть закономерным не представляющим особых проблем во многих случаях (но не во всех), однако (и это самое главное), такое поведение противоречит логике. Линия, касающаяся края многоугольника, и линия пересекающая границу полигона - разные вещи. В приведённом примере линия именно касается границы многоугольника, а не пересекает. Если быть последовательным в логике реализации алгоритма отсечения, то геометрия, получаемая при пересечении линии и полигона, в случае, когда часть линии лежит на ребре полигона, должна представлять собой совокупность бесконечного множества отдельных точек, ибо раз линия касается ребра в каждой точке, то и каждая точка должна составлять отдельный узел. Однако, на практике подобное отсечение работает относительно адекватно - линия обрезается не в каждом месте касания, а только в местах пересечения линией границы полигона (ну и плюс, в местах, где на этом ребре оказался лишний узел).
Почему важно соблюдение логики создания геометрий (безотносительно QGIS)? - При пересечении линией (linestring) выпуклого полигона не может быть больше 2-точек пересечения. Если их больше (и мы имеем мультигеометрию на выходе), то это означает, что полигон - невыпуклый. При пересечении линией невыпуклого многоугольника (следуя логике) мы получаем мультигеометрию в случае, если линия "входит" в полигон более одного раза или касается как минимум двух его вершин, или пересекает полигон и касается грани или вершины полигона на некотором расстоянии от пересечения (ну и комбинации указанных случаев). Если эта логика не соблюдается (как в нашем случае), то это ведёт к осложнениям в проектировании приложений.
В общем, хотелось бы, что бы инструмент работал логично. Если это "не ошибка", и разработчики просто не учли частный случай, то топик можно перенести в раздел "предложения".
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!