[postgis-tickets] [PostGIS] #4684: concurrent topology construction routine may result in invalid topology
PostGIS
trac at osgeo.org
Mon Jan 11 02:46:22 PST 2021
#4684: concurrent topology construction routine may result in invalid topology
-----------------------+---------------------------
Reporter: laopsahl | Owner: strk
Type: defect | Status: new
Priority: medium | Milestone: PostGIS 3.0.4
Component: topology | Version: 3.0.x
Resolution: | Keywords:
-----------------------+---------------------------
Comment (by strk):
Same kind of invalidity (wrong containment info) happens for isolated
edges:
Using SQL:
- P0: select createtopology('isoinface');
- P1: begin; select topogeo_addpoint('isoinface', 'LINESTRING(4 5, 6
5)');
- P2: begin: select topogeo_addlinestring('isoinface', 'LINESTRING(0 0,0
10,10 10,10 0,0 0)');
- P1: commit;
- P2: commit;
At the end of the above process, we'll have th `isoinface` topology
containing 1 face, 2 edge and 3 nodes. The ISOLATED edge (the one inserted
by P1) will have a wrong `left_face` and `right_face` values:
{{{
=# select e.edge_id, st_astext(e.geom) g, e.left_face, e.right_face,
f.face_id as containing_face
from isoinface.edge e left outer join isoinface.face f
on (f.face_id != 0 and ST_Contains(ST_GetFaceGeometry('isoinface',
f.face_id), e.geom));
edge_id | g | left_face | right_face |
containing_face
---------+-------------------------------------+-----------+------------+-----------------
2 | LINESTRING(0 0,0 10,10 10,10 0,0 0) | 0 | 2 |
3 | LINESTRING(4 4,6 6) | 0 | 0 |
2
(2 rows)
}}}
This kind of invalidity is also not currently detected by ValidateTopology
function (see #4830)
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/4684#comment:19>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-tickets
mailing list