Skip to content

Validation for self-intersection WKT Multipolygon fails at the WKTReader, while works when wrapped in a GEOMETRYCOLLECTION #232

Open
@seut

Description

@seut

Used version 0.8.

We encountered that parsing a WKT MultiPolygon containing a self-intersection works while it will raise a validation error when it is wrapped into a GEOMETRYCOLLECTION.

This code parses the WKT string into a valid MultiPolygon instance.

var reader = (WKTReader) JtsSpatialContext.GEO.getFormats().getWktReader();
var shape = reader.parse(''MULTIPOLYGON (((5 5, 10 5, 10 10, 5 5)), ((6 6, 10 5, 10 10, 6 6)))');

While this one raises a InvalidShapeException:

var reader = (WKTReader) JtsSpatialContext.GEO.getFormats().getWktReader();
var shape = reader.parse(''GEOMETRYCOLLECTION ( MULTIPOLYGON (((5 5, 10 5, 10 10, 5 5)), ((6 6, 10 5, 10 10, 6 6))) )');

Stacktrace:

Caused by: org.locationtech.spatial4j.exception.InvalidShapeException: Self-intersection at or near point (10.0, 5.0, NaN)
	at org.locationtech.spatial4j.shape.jts.JtsGeometry.validate(JtsGeometry.java:127)
	at org.locationtech.spatial4j.shape.jts.JtsShapeFactory.makeShapeFromGeometry(JtsShapeFactory.java:502)
	at org.locationtech.spatial4j.shape.jts.JtsShapeFactory.makeShapeFromGeometry(JtsShapeFactory.java:475)
	at org.locationtech.spatial4j.shape.jts.JtsShapeFactory$JtsMultiShapeBuilder.build(JtsShapeFactory.java:446)
	at org.locationtech.spatial4j.io.WKTReader.parseGeometryCollectionShape(WKTReader.java:356)
	at org.locationtech.spatial4j.io.WKTReader.parseShapeByType(WKTReader.java:165)
	at org.locationtech.spatial4j.io.WKTReader.parseIfSupported(WKTReader.java:110)
	at org.locationtech.spatial4j.io.WKTReader.parse(WKTReader.java:81)

I would expect that both variants behave the same.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions