duckdb / duckdb/duckdb-spatial

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

Open
#406 1 comment 0 reactions 0 assignees View on GitHub
bug
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.