Opened 6 years ago

Last modified 7 weeks ago

#3042 new enhancement

Add edge-linking checks in ValidateTopology

Reported by: strk Owned by: strk
Priority: medium Milestone: PostGIS 3.2.0
Component: topology Version: master
Keywords: Cc: remic


The ValidateTopology? function does not currently check if edge linking is correct. It probably should.


Change History (8)

comment:1 Changed 6 years ago by strk

Milestone: PostGIS 2.2.0PostGIS Future

comment:2 Changed 4 years ago by robe

Milestone: PostGIS FuturePostGIS Fund Me

Milestone renamed

comment:3 Changed 8 months ago by strk

For reference, #4709 is a bad consequence (backend crash) of a topology with edge-linking corruption, so dealing with it with ValidateTopology? becomes more important.

comment:4 Changed 8 months ago by Sandro Santilli <strk@…>

In 2ce98e2/git:

Handle non-closed edge rings by human readable error

Handle both topological and geometrical corruption

Have getRingEdges raise an error if topology is corrupted

References #4709
References #3042

comment:5 Changed 8 months ago by laopsahl

Another problem with function is that uses a lot of time .

Does make a sense to make optimal parameter bbox to limit the area to check ?

comment:6 Changed 8 months ago by strk

There are a number of validity checks that could be performed within a limited bounding box yes, I'm thinking of:

  • Edge linking (for all nodes falling in the bbox)
  • Consistent side-labelling for linked edges

comment:7 Changed 7 weeks ago by strk

Milestone: PostGIS Fund MePostGIS 3.2.0

Remi: where can your rc_RecomputeEdgeLinking function be found ? It'd be interesting to look at it now :)

comment:8 Changed 7 weeks ago by Sandro Santilli <strk@…>

In ac60803/git:

Enhance test for topology edge side faces

  • Also check non-isolated ones
  • Catch universal face containment (only in non-boundary case)

Closes #4830 again

Includes more testcases and updates pre-existing one expectance.

The only missing check now is for dangling edges advertising
the universal face on only ONE side. We cannot easily check
this becase we'd expect such edge to be only contaied by a face
and it will be, even if both sides are in the _same_ face.
This case can only be determined by edge-linking checking
(references #3042)

Note: See TracTickets for help on using tickets.