Description:
For some (mostly small-scale) spatial unit geometries, the computation of calculateResidentialAreaWeightedRangeCoverage() runs into different TopologyExceptions.
Steps to Reproduce
- For instance log into https://kommonitor.fbg-hsbo.de/#!/ with an account that has rights to access any indicator for the spatial unit Wohnviertelebene .
- go to reachability scenario and create new scenario
- select POI dataset Jugendhäuser und Beratungsstellen and compute 10 minute foot-walking isochrones.
- go to indicator statictics and select any indicator that supports the spatial unit Wohnviertelebene (i.e. Bevölkerung 0 bis unter 18 Jahre)
- as computation method select überlappende Wohngebiete
- the process takes a while and aborts.
Expected Behaviour
The process should not run into an error, but return the indicator statistics computation results.
Additional Information
I already tested the spatial data processor with different settings for the parameter kommonitor.processor.simplify-spatial-unit-geometries
Depending on it's value, different Topology-Exceptions occur:
- kommonitor.processor.simplify-spatial-unit-geometries=weak
org.locationtech.jts.geom.TopologyException: no outgoing dirEdge found [ (6.931231379784173, 51.48619619810057, NaN) ] at org.locationtech.jts.geomgraph.DirectedEdgeStar.linkResultDirectedEdges(DirectedEdgeStar.java:225) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geomgraph.PlanarGraph.linkResultDirectedEdges(PlanarGraph.java:61) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.PolygonBuilder.add(PolygonBuilder.java:66) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.PolygonBuilder.add(PolygonBuilder.java:56) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.computeOverlay(OverlayOp.java:248) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.getResultGeometry(OverlayOp.java:181) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.overlayOp(OverlayOp.java:84) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.getResultGeometry(SnapIfNeededOverlayOp.java:75) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.overlayOp(SnapIfNeededOverlayOp.java:37) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.overlay(GeometryOverlay.java:76) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.intersection(GeometryOverlay.java:119) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1330) ~[jts-core-1.19.0.jar!/:na] at org.n52.kommonitor.spatialdataprocessor.operations.SpatialOperationUtils.polygonalIntersection(SpatialOperationUtils.java:59) ~[classes!/:1.0.4] at org.n52.kommonitor.spatialdataprocessor.process.IsochronePruneProcess.calculateResidentialAreaWeightedRangeCoverage(IsochronePruneProcess.java:299) ~[classes!/:1.0.4]
- kommonitor.processor.simplify-spatial-unit-geometries=medium or kommonitor.processor.simplify-spatial-unit-geometries=strong or kommonitor.processor.simplify-spatial-unit-geometries=original
org.locationtech.jts.geom.TopologyException: found non-noded intersection between LINESTRING ( 6.995236134231634 51.438880742907706, 6.99528064051668 51.438834767094455 ) and LINESTRING ( 6.9954162 51.43887205, 6.995280640516679 51.438834767094455 ) [ (6.99528064051668, 51.438834767094455, NaN) ] at org.locationtech.jts.noding.FastNodingValidator.checkValid(FastNodingValidator.java:139) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:80) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:45) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.computeOverlay(OverlayOp.java:229) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.getResultGeometry(OverlayOp.java:181) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.overlayOp(OverlayOp.java:84) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.getResultGeometry(SnapIfNeededOverlayOp.java:75) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.overlayOp(SnapIfNeededOverlayOp.java:37) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.overlay(GeometryOverlay.java:76) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.intersection(GeometryOverlay.java:119) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1330) ~[jts-core-1.19.0.jar!/:na] at org.n52.kommonitor.spatialdataprocessor.operations.SpatialOperationUtils.polygonalIntersection(SpatialOperationUtils.java:59) ~[classes!/:1.0.4] at org.n52.kommonitor.spatialdataprocessor.process.IsochronePruneProcess.calculateResidentialAreaWeightedRangeCoverage(IsochronePruneProcess.java:299) ~[classes!/:1.0.4]
Description:
For some (mostly small-scale) spatial unit geometries, the computation of calculateResidentialAreaWeightedRangeCoverage() runs into different TopologyExceptions.
Steps to Reproduce
Expected Behaviour
The process should not run into an error, but return the indicator statistics computation results.
Additional Information
I already tested the spatial data processor with different settings for the parameter kommonitor.processor.simplify-spatial-unit-geometries
Depending on it's value, different Topology-Exceptions occur:
org.locationtech.jts.geom.TopologyException: no outgoing dirEdge found [ (6.931231379784173, 51.48619619810057, NaN) ] at org.locationtech.jts.geomgraph.DirectedEdgeStar.linkResultDirectedEdges(DirectedEdgeStar.java:225) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geomgraph.PlanarGraph.linkResultDirectedEdges(PlanarGraph.java:61) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.PolygonBuilder.add(PolygonBuilder.java:66) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.PolygonBuilder.add(PolygonBuilder.java:56) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.computeOverlay(OverlayOp.java:248) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.getResultGeometry(OverlayOp.java:181) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.overlayOp(OverlayOp.java:84) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.getResultGeometry(SnapIfNeededOverlayOp.java:75) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.overlayOp(SnapIfNeededOverlayOp.java:37) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.overlay(GeometryOverlay.java:76) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.intersection(GeometryOverlay.java:119) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1330) ~[jts-core-1.19.0.jar!/:na] at org.n52.kommonitor.spatialdataprocessor.operations.SpatialOperationUtils.polygonalIntersection(SpatialOperationUtils.java:59) ~[classes!/:1.0.4] at org.n52.kommonitor.spatialdataprocessor.process.IsochronePruneProcess.calculateResidentialAreaWeightedRangeCoverage(IsochronePruneProcess.java:299) ~[classes!/:1.0.4]org.locationtech.jts.geom.TopologyException: found non-noded intersection between LINESTRING ( 6.995236134231634 51.438880742907706, 6.99528064051668 51.438834767094455 ) and LINESTRING ( 6.9954162 51.43887205, 6.995280640516679 51.438834767094455 ) [ (6.99528064051668, 51.438834767094455, NaN) ] at org.locationtech.jts.noding.FastNodingValidator.checkValid(FastNodingValidator.java:139) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:80) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geomgraph.EdgeNodingValidator.checkValid(EdgeNodingValidator.java:45) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.computeOverlay(OverlayOp.java:229) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.getResultGeometry(OverlayOp.java:181) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.OverlayOp.overlayOp(OverlayOp.java:84) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.getResultGeometry(SnapIfNeededOverlayOp.java:75) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.operation.overlay.snap.SnapIfNeededOverlayOp.overlayOp(SnapIfNeededOverlayOp.java:37) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.overlay(GeometryOverlay.java:76) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.GeometryOverlay.intersection(GeometryOverlay.java:119) ~[jts-core-1.19.0.jar!/:na] at org.locationtech.jts.geom.Geometry.intersection(Geometry.java:1330) ~[jts-core-1.19.0.jar!/:na] at org.n52.kommonitor.spatialdataprocessor.operations.SpatialOperationUtils.polygonalIntersection(SpatialOperationUtils.java:59) ~[classes!/:1.0.4] at org.n52.kommonitor.spatialdataprocessor.process.IsochronePruneProcess.calculateResidentialAreaWeightedRangeCoverage(IsochronePruneProcess.java:299) ~[classes!/:1.0.4]