mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-23 00:22:38 +00:00
Fix ST_NewEdgesSplit can cause invalid topology
References #5795 in master branch (3.6.0dev) Includes testcase
This commit is contained in:
parent
cfc46e4641
commit
f266d62c1e
|
@ -1336,7 +1336,7 @@ lwt_NewEdgesSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge,
|
|||
|
||||
/* Update all next edge references pointing to old edge id */
|
||||
|
||||
updedge.next_right = newedges[1].edge_id;
|
||||
updedge.next_right = newedges[0].edge_id;
|
||||
seledge.next_right = edge;
|
||||
seledge.start_node = oldedge->start_node;
|
||||
ret = lwt_be_updateEdges(topo,
|
||||
|
@ -1350,7 +1350,7 @@ lwt_NewEdgesSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge,
|
|||
return -1;
|
||||
}
|
||||
|
||||
updedge.next_right = -newedges[0].edge_id;
|
||||
updedge.next_right = -newedges[1].edge_id;
|
||||
seledge.next_right = -edge;
|
||||
seledge.start_node = oldedge->end_node;
|
||||
ret = lwt_be_updateEdges(topo,
|
||||
|
|
|
@ -143,3 +143,33 @@ DROP TABLE t;
|
|||
|
||||
DROP FUNCTION check_changes();
|
||||
SELECT DropTopology('city_data');
|
||||
|
||||
select '---';
|
||||
|
||||
-- Regression test for ST_NewEdgesSplit can cause invalid topology
|
||||
-- See https://trac.osgeo.org/postgis/ticket/5795
|
||||
select '#5795|Regression test starting';
|
||||
select '#5795|Create t5795' from (select null from topology.createtopology('t5795', 0, 0)) q;
|
||||
select '#5795|N' || topology.st_addisonode('t5795', 0, st_geomfromtext('POINT(0 0)'));
|
||||
select '#5795|N' || topology.st_addisonode('t5795', 0, st_geomfromtext('POINT(10 10)'));
|
||||
select '#5795|E' || topology.st_addisoedge('t5795', 1, 2, st_geomfromtext('LINESTRING(0 0, 10 0, 10 10)'));
|
||||
select '#5795|E' || topology.st_addedgenewfaces('t5795', 2, 1, st_geomfromtext('LINESTRING(10 10, 0 10, 0 0)'));
|
||||
select '#5795|N' || topology.st_newedgessplit('t5795', 1, st_geomfromtext('POINT(5 0)'));
|
||||
select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
|
||||
select '#5795|V1' ||topology.validatetopology('t5795');
|
||||
select '#5795|N' || topology.st_newedgessplit('t5795', 4, st_geomfromtext('POINT(10 5)'));
|
||||
select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
|
||||
select '#5795|V2' ||topology.validatetopology('t5795');
|
||||
select '#5795|E' || topology.st_addedgenewfaces('t5795', 3, 4, st_geomfromtext('LINESTRING(5 0, 10 5)'));
|
||||
select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
|
||||
select '#5795|V3' ||topology.validatetopology('t5795');
|
||||
select '#5795|N' || topology.st_newedgessplit('t5795', 7, st_geomfromtext('POINT(7.5 2.5)'));
|
||||
select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
|
||||
select '#5795|V4' ||topology.validatetopology('t5795');
|
||||
select '#5795|N' || topology.st_newedgessplit('t5795', 5, st_geomfromtext('POINT(10 2.5)'));
|
||||
select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
|
||||
select '#5795|V5' || topology.validatetopology('t5795');
|
||||
select '#5795|E' || topology.st_addedgenewfaces('t5795', 5, 6, st_geomfromtext('LINESTRING(7.5 2.5, 10 2.5)'));
|
||||
select topology.validatetopology('t5795');
|
||||
select '#5795|Drop t5795' from (select null from topology.droptopology('t5795')) q;
|
||||
select '#5795|Regression test finished';
|
||||
|
|
|
@ -36,3 +36,43 @@ seq_reset|1|1|1
|
|||
robust.1|E1|N3
|
||||
robust.2|t|t
|
||||
Topology 'city_data' dropped
|
||||
---
|
||||
#5795|Regression test starting
|
||||
#5795|Create t5795
|
||||
#5795|N1
|
||||
#5795|N2
|
||||
#5795|E1
|
||||
#5795|E2
|
||||
#5795|N3
|
||||
#5795|E2|3|-4|1|0
|
||||
#5795|E3|4|-2|1|0
|
||||
#5795|E4|2|-3|1|0
|
||||
#5795|N4
|
||||
#5795|E2|3|-6|1|0
|
||||
#5795|E3|5|-2|1|0
|
||||
#5795|E5|6|-3|1|0
|
||||
#5795|E6|2|-5|1|0
|
||||
#5795|E7
|
||||
#5795|E2|3|-6|3|0
|
||||
#5795|E3|7|-2|3|0
|
||||
#5795|E5|-7|-3|2|0
|
||||
#5795|E6|2|-5|3|0
|
||||
#5795|E7|6|5|3|2
|
||||
#5795|N5
|
||||
#5795|E2|3|-6|3|0
|
||||
#5795|E3|8|-2|3|0
|
||||
#5795|E5|-9|-3|2|0
|
||||
#5795|E6|2|-5|3|0
|
||||
#5795|E8|9|5|3|2
|
||||
#5795|E9|6|-8|3|2
|
||||
#5795|N6
|
||||
#5795|E2|3|-6|3|0
|
||||
#5795|E3|8|-2|3|0
|
||||
#5795|E6|2|-11|3|0
|
||||
#5795|E8|9|10|3|2
|
||||
#5795|E9|6|-8|3|2
|
||||
#5795|E10|11|-3|2|0
|
||||
#5795|E11|-9|-10|2|0
|
||||
#5795|E12
|
||||
#5795|Drop t5795
|
||||
#5795|Regression test finished
|
||||
|
|
Loading…
Reference in a new issue