duckdb / duckdb/duckdb-spatial
ST_IsValid not catching Error: IllegalArgumentException: Points of LinearRing do not form a closed linestring
- Dominant language
- C
- Stars
- 708
- Forks
- 96
- Avg merge
- 1d 21h
- Merged PRs (30d)
- 5
Description
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.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.