duckdb_spatial
duckdb_spatial copied to clipboard
ST_IsValid not catching Error: IllegalArgumentException: Points of LinearRing do not form a closed linestring
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.
I also have this issue. It seems to be true for all unclosed polygons, not just from osm