Что означает сообщение об ошибке.
Ошибка означает, что ввод функции недействителен, как определено Стандарты доступа к простым функциям (либо ISO или OG C версия). Многоугольник должен быть описан как оболочка (al oop без самопересечений) и необязательно отверстия (опять же, al oop без самопересечений, дыры не могут пересекать друг друга или оболочку).
У вас есть дубликаты вершин и, следовательно, самопересечения в l oop. Это часто означает цифру 8 oop. Это недопустимый многоугольник, такая форма должна быть описана двумя многоугольниками, с отдельным многоугольником, представляющим каждый круг в «8».
Т.е. POLYGON((0 0, 1 1, 2 0, 2 2, 1 1, 0 2, 0 0))
не является правильным, но MULTIPOLYGON(((0 0, 1 1, 0 2, 0 0)), ((1 1, 2 0, 2 2, 1 1)))
является правильным, даже если некоторые инструменты могут показывать их одинаково.
То, как вы исправите этот ввод на практике, зависит от того, откуда поступают данные и как они генерируются. Если вы просто хотите обнаружить и обойти ошибку в нескольких строках, используйте SAFE.ST_MakePolygon
- она возвращает NULL вместо сбоя, поэтому по крайней мере другие строки будут в порядке.