POSTGIS TopologyException: side location conflict POSTGIS TopologyException: side location conflict postgresql postgresql

POSTGIS TopologyException: side location conflict


I found a relevant solution to my problem.

select st_intersects(st_buffer('MULTIPOLYGON(((1 5,4 8,7 5,4 2,1 5)),((5 5,8 8,11 5,8 2,5 5)))',0),'POLYGON((3 4.5,3 5,4 5,4 4,3 4.5))');

When i added the st_buffer it merge the two polygons of the multipolygon to one and solved the issue.


you can check that the MultiPolygon geometry in your query is not a valid MultiPolygon:

=> select st_isvalid(    st_geomfromtext(        'MULTIPOLYGON(((1 5,4 8,7 5,4 2,1 5)),((5 5,8 8,11 5,8 2,5 5)))'));NOTICE:  Self-intersection at or near point 6 6 st_isvalid------------ f(1 row)

the reason for this is that the Polygon (5 5,8 8,11 5,8 2,5 5) defining the "hole" (inner ring) intersects the outer ring (1 5,4 8,7 5,4 2,1 5).

It would be either necessary to fix the input manually, or one can use ST_MakeValid to do the job (it automatically detects and handles the overlapping parts):

=> select st_intersects(    st_makevalid(        'MULTIPOLYGON(((1 5,4 8,7 5,4 2,1 5)),((5 5,8 8,11 5,8 2,5 5)))'    ),    'POLYGON((3 4.5,3 5,4 5,4 4,3 4.5))'); st_intersects --------------- t(1 row)