duckdb_spatial icon indicating copy to clipboard operation
duckdb_spatial copied to clipboard

ST_IsValid not catching Error: IllegalArgumentException: Points of LinearRing do not form a closed linestring

Open StephanGeorg opened this issue 1 year ago • 1 comments

I came across this issue when working with Overture Building data from OpenStreetMap.

D select st_geometrytype("geometry"), count(1) from it_buildings where source = 'OpenStreetMap' group by st_geometrytype("geometry");
┌───────────────────────────┬──────────┐
│ st_geometrytype(geometry) │ count(1) │
│       geometry_type       │  int64   │
├───────────────────────────┼──────────┤
│ POLYGON                   │ 15169443 │
│ MULTIPOLYGON              │     1122 │
└───────────────────────────┴──────────┘

when trying to calculate centroids of these polygons an error is thrown:

D select st_centroid("geometry") from it_buildings where source = 'OpenStreetMap' and st_geometrytype("geometry") = 'POLYGON';
Invalid Input Error: IllegalArgumentException: Points of LinearRing do not form a closed linestring

even st_isValid does not catch these errors:

D select st_isvalid("geometry") from it_buildings where source = 'OpenStreetMap' and st_geometrytype("geometry") = 'POLYGON';
Invalid Input Error: IllegalArgumentException: Points of LinearRing do not form a closed linestring

nor st_makevalid can fix these geometries

D select st_makevalid("geometry") from it_buildings where source = 'OpenStreetMap' and st_geometrytype("geometry") = 'POLYGON';
Invalid Input Error: IllegalArgumentException: Points of LinearRing do not form a closed linestring

I could provide some example data but I was able to only narrow down to where source = 'OpenStreetMap' and st_geometrytype("geometry") = 'POLYGON' which is still 15169443 rows.

StephanGeorg avatar Sep 20 '24 09:09 StephanGeorg

I also have this issue. It seems to be true for all unclosed polygons, not just from osm

eolweus avatar Jan 27 '25 18:01 eolweus