Исключение топологии PostGIS

#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