Вот контурная карта, для которой доступны все полигоны уровней.
Давайте спросим, как сгладить полигоны, сохранив все вершины в их точных местоположениях?
Действительно, контур сделан поверх данных сетки, вы можете предложить затем сгладить данные сетки, и, следовательно, полученный контур будет более гладким. Обратите внимание, что это не работает, как я хочу, так как функция сглаживания, такая как фильтр Гаусса, удалит небольшие пакеты данных и изменит диапазон третьей переменной, например, высоту, которая не разрешена в моем приложении.
На самом деле я ищу кусок кода (желательно на Python ), который может выполнять сглаживание 2D-полигонов (любого типа: выпуклый, вогнутый, самопересекающийся и т. Д.), Достаточно безболезненный (забудьте страницы кодов) и точный.
К вашему сведению, в ArcGIS есть функция , которая прекрасно справляется с этой задачей, но использование сторонних коммерческих приложений не является моим выбором для этого вопроса.
1)
Scipy.interpolate:
Как видите, полученные сплайны (красные) не являются удовлетворительными!
2)
Вот результат, используя код, приведенный здесь . Это не работает хорошо!
3)
Для меня лучшим решением должно быть что-то вроде следующего рисунка, на котором квадрат постепенно сглаживается путем изменения только одного значения. Я надеюсь на похожую концепцию для сглаживания любой формы многоугольников.
Удовлетворяя условию, что сплайн проходит точки:
4)
Вот моя реализация «идеи Вубера» строка за строкой в Python на его данных. Возможно, есть некоторые ошибки, так как результаты не очень хорошие.
K = 2 - это катастрофа и поэтому для k> = 4.
5)
Я удалил одну точку в проблемном месте, и полученный сплайн теперь идентичен сплайну. Но это все еще вопрос, почему метод не работает для всех случаев?
6)
Хорошее сглаживание для данных whuber может быть следующим (нарисованным программным обеспечением векторной графики), в котором плавно добавляется дополнительная точка (сравните с обновлением)
4):
7)
Смотрите результат из Python-версии кода whuber для некоторых иконических фигур:
Обратите внимание, что этот метод не работает для полилиний. Для угла полилинии (контур) зеленый это то, что я хочу, но получил красный. Это необходимо учитывать, поскольку контурные карты всегда являются полилиниями, хотя замкнутые полилинии можно рассматривать как многоугольники, как в моих примерах. Также не то, что проблема, возникшая в обновлении 4, еще не решена.
8) [мой последний]
Вот окончательное решение (не идеальное!):
Помните, что вам придется что-то делать с областью, на которую указывают звезды. Возможно, в моем коде есть ошибка, или предложенный метод нуждается в дальнейшей разработке, чтобы рассмотреть все ситуации и предоставить желаемые результаты.