#postgis
Вопрос:
У меня есть проблемы с ошибками топологии в нескольких больших наборах данных PostGIS.
create table out_table as select st_union(st_makevalid(geom)) from InTable where st_isvalid(geom) ;
Я получил :
ERROR: GEOSUnaryUnion: TopologyException: found non-noded intersection between LINESTRING (86413.6 399070, 86413.6 399070) and LINESTRING (86413.6 399070, 86413.6 399070) at 86413.606740907679 399070.20461758168
Наборы данных соответствуют делимитации сельскохозяйственных участков (мультиполигоны) и в большинстве случаев получены из человеческого рисунка. Я думаю, что именно по этой причине существует много ошибок.
Я также пробовал решения с использованием st_union(st_buffer(geom,0))
или st_union(st_simplify(geom,0.01))
или st_transform(st_union(st_transform(geom,4326)),EPSGout)
, как это можно найти в других сообщениях stackoverflow. Иногда одно из этих решений работает, но не систематически, и мне нужен полностью автоматический процесс с надежным решением.
Есть ли идея универсальной команды, которая работает независимо от наборов данных? Для меня st_makevalid(geom)
должно быть решение, но оно не работает. Конечно, решение, которое сохраняет все сущности, предпочтительнее, но я приму решение, которое отбрасывает сущности с TopologyException
Спасибо
[ПРАВКА-1]
В дополнение, я нашел именно свою проблему на другом угощении там => >https://trac.osgeo.org/postgis/ticket/4182#comment:8 И я не смог заставить safe_union
функцию, предложенную фенгелем, работать
Единственное решение, которое я нашел, — это использование функции QGIS dissolve, которая пропускает исключения и просто выводит предупреждения. qgis доступен с помощью python, и я думаю, что буду полагаться на это, даже если бы я предпочел решение PostGIS
Комментарии:
1. Эй, Мартин, не могли бы вы добавить данные (например, как WKT), которые вызывают проблему, и сообщить нам, в каких SRS они закодированы?
2. Привет, Джим — Трудно извлечь данные в определенном месте, где есть исключения. пожалуйста, найдите здесь весь набор данных dropbox.com/s/n42yma4z15b6nxm/spl_2020.gpkg?dl=1 SRS-это EPSG:28992