Полигон замыкается петлёй сам на себя

Кроме QGIS
Ответить
Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Полигон замыкается петлёй сам на себя

Сообщение rhot » 09 июн 2016, 18:50

Получил от коллеги векторные данные. Он уверял, что данные кристально чистые. :?

Изначально ошибка топологии возникла при работе функции rgeos::gBuffer в R. Там полно полигонов, которые имеют дыры, замыкающиеся на границу полигонов, т.е. граница сама на себя перехлёстывается.
См. рисунок: жёлтый цвет - полигон с ошибкой топологии, прозрачные круги - составные точки суррогатного полигона, который нужно удалить.
topology_error.png
topology_error.png (10.58 КБ) 15079 просмотров
Я в курсе, что ArcGIS for Desktop Advanced умеет фиксить ошибки топологии, но только для своего формата данных - GDB. Мне это не совсем подходит, лень конвертить шейп.

Перегонку через растр не предлагать, т.к. это очень затратно как в плане времени, так и ресурсов.

Пробовал v.clean в GRASS: не помогло. Странно, но в GRASS именно такая ошибка топологии почему-то не учтена, поправьте если ошибаюсь.

Пробовал плагин repair for Processing для QGIS. По-моему, он вообще не работает. Оригинальный repair, который требует доустановки софта от Hugo Ledoux, чем отличается?

PostGIS (ST_IsValid()) назвал это Ring self-intersection. Функция ST_MakeValid() не дала результатов.

Можно ли исправить именно эту ошибку топологии автоматом?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Полигон замыкается петлёй сам на себя

Сообщение Ariki » 09 июн 2016, 19:17

А ST_MakeValid вообще ничего не сделал с геометрией или превратил её в корректную геометрию с дыркой, касающейся внешней границы? Ещё ST_Buffer(geom, 0) можно попробовать.

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Полигон замыкается петлёй сам на себя

Сообщение rhot » 09 июн 2016, 19:21

ST_MakeValid() странно сработал - некоторые полигоны растянулись на несколько км в разные стороны.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Полигон замыкается петлёй сам на себя

Сообщение KolesovDmitry » 09 июн 2016, 19:22

Правильно ли я понял, что нужно удалить верхний треугольник серого цвета, вклинивающийся в желтый? А получившееся пустое место присоединить к желтому?

Если так, то по-моему в GRASS все-таки можно такое сделать, хотя и не полностью автоматом (потребуется играть параметрами). Нужно:
1. Создать узлы в пересечениях линий (есть инструмент для этого), если этих узлов еще нет.
2. Удалить области, меньшие по площади заданного порога.

Это если говорить о готовых инструментах. Возможно, что получится написать скрипт, который делает то, что нужно, если сформулировать по пунктам, как должен вести себя этот скрипт для разных входных данных.

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Полигон замыкается петлёй сам на себя

Сообщение rhot » 09 июн 2016, 19:29

Что-то наподобие этого?

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

v.clean input=areamap output=areamap_clean1 tool=bpol,rmdupl type=boundary
v.clean input=areamap_clean1 output=areamap_clean2 tool=rmarea type=area threshold=10
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Полигон замыкается петлёй сам на себя

Сообщение rhot » 09 июн 2016, 19:33

KolesovDmitry писал(а):Правильно ли я понял, что нужно удалить верхний треугольник серого цвета, вклинивающийся в желтый? А получившееся пустое место присоединить к желтому?
Проблема двояка. Есть треугольники, которые просто суррогаты, т.е. возникли из-за плохоруких операторов, а есть треугольники с осмысленными данными, которые трогать нельзя.
Некоторые полигоны вместо серого треугольника не имеют ничего, т.е. буквально дыра. Значит, инструмент с удалением маленьких полигонов не решит проблему полностью.
Последний раз редактировалось rhot 09 июн 2016, 19:48, всего редактировалось 1 раз.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Полигон замыкается петлёй сам на себя

Сообщение KolesovDmitry » 09 июн 2016, 19:37

Да, что-то похожее. Только я бы использовал break, чтобы создать узел на пересечении линий:

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

v.clean input=areamap output=areamap_clean tool=break,rmdupl,rmarea type=boundary threshold=dummy,dummy,10
Но на самом деле я не проверял код, нужно смотреть, что там есть среди инструментов

bim2010
Гуру
Сообщения: 977
Зарегистрирован: 27 янв 2009, 22:57
Репутация: 258

Re: Полигон замыкается петлёй сам на себя

Сообщение bim2010 » 09 июн 2016, 21:10

Делал двойное преобразование в Mapinfo. Сначала все полигоны преобразовал в полилинии; все линии объединил в одну; разъединить линии; создал полигоны из линий; отсортировал полигоны по площади; удалил самые мелкие. Помогло ~ на 90%.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Полигон замыкается петлёй сам на себя

Сообщение Александр Мурый » 13 июн 2016, 14:13

По-хорошему, чтобы оценить возможность обработки таких полигонов в GRASS или ещё в каком-либо ПО, нужны тестовые данные. Было бы интересно поэкспериментировать.
Редактор материалов, модератор форума

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Полигон замыкается петлёй сам на себя

Сообщение rhot » 13 июн 2016, 20:28

Согласен, только данных на 1,5 Гб.
Временно, решил проблему через растр. :?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Полигон замыкается петлёй сам на себя

Сообщение Александр Мурый » 13 июн 2016, 22:39

rhot писал(а):Согласен, только данных на 1,5 Гб.
Временно, решил проблему через растр. :?
Круто, конечно, только вот почему бы сразу не написать здесь это решение?
Редактор материалов, модератор форума

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Полигон замыкается петлёй сам на себя

Сообщение rhot » 14 июн 2016, 10:37

Потому что это не решение, а костыль.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Полигон замыкается петлёй сам на себя

Сообщение Ariki » 14 июн 2016, 12:39

rhot писал(а):Проблема двояка. Есть треугольники, которые просто суррогаты, т.е. возникли из-за плохоруких операторов, а есть треугольники с осмысленными данными, которые трогать нельзя.
Всё-таки нужен критерий, позволяющий отличить осмысленные треугольники от бессмысленных, и тестовый пример с хотя бы несколькими "хорошими" и "плохими" полигонами. Иначе задача не поставлена корректно.

Ответить

Вернуться в «Свободные, бесплатные, открытые ГИС»

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

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