Вставка и недопустимая геометрия PostGIS

#postgresql #postgis

#postgresql #postgis

Вопрос:

Я создал функцию, которая выполняет некоторые проверки достоверности таблиц / представлений в postgres / postgis. Postgres 9.6.11 и PostGIS 2.3. Теперь мне нужно протестировать эту функцию, поэтому мне нужно создать таблицу с недопустимой геометрией в ней. Предпочтительнее тот, который можно исправить с помощью ST_MakeValid , и тот, который не будет исправлен этим, чтобы я мог протестировать все варианты использования. Как вставить недопустимую геометрию в таблицу postgis.

Ответ №1:

Это непростая задача, и она сильно зависит от версии.

Вы можете попытаться заблокировать допустимую геометрию, или вы можете попытаться вставить недопустимую.

Например, эта строка создает недопустимую линию (2 точки, начало = конечная точка)

 SELECT st_setsrid(st_geomfromtext('LINESTRING(480 270,480 270)'),3857);
  

ST_MakeValid преобразует его в точку.

или создайте самопересекающийся многоугольник

 SELECT st_isValid('polygon((0 0, 1 0, 0 1, 1 1, 0 0))'::geometry);
NOTICE:  Self-intersection at or near point 0.5 0.5
 st_isvalid
------------
 f
  

ST_MakeValid преобразует его в мультиполигон

Вы также можете найти больше примеров здесь

Комментарии:

1. Это сработало отлично. Ошибка с галстуком-бабочкой (потому что в столбце разрешены только полигоны) и скрученный полигон также сработали, поскольку ST_MakeValid результатом был полигон. Спасибо!