city_data.node WHERE node_id IN ( 27, 28, 29 )
ORDER BY node_id;
+--
+-- Split a face containing an hole, this time with no ring continuity
+-- This version goes clockwise
+-- All involved faces contain isolated nodes
+--
+SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(19.5 37.5)'), 28;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(19 38)'), 28;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 2, 'POINT(20.5 35)'), 2;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(20.5 34)'), 28;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(20.5 33)'), 28;
+
+INSERT INTO newedge SELECT 24, topology.st_addedgemodface('city_data',
+ 30, 30, 'LINESTRING(19.5 37.5, 24.5 37.5, 19.5 32.5, 19.5 37.5)');
+SELECT 'T24', 'E'||edge_id, next_left_edge, next_right_edge,
+ left_face, right_face FROM
+ city_data.edge WHERE edge_id IN (
+ SELECT edge_id FROM newedge WHERE id IN (24, 23, 16)
+ UNION VALUES (2),(3) )
+ ORDER BY edge_id;
+SELECT 'T24', 'N' || node_id, containing_face FROM
+ city_data.node WHERE node_id IN ( 27, 30, 31, 32, 33, 34 )
+ ORDER BY node_id;
+
+--
+-- Split a face containing an hole, this time with no ring continuity
+-- This version goes counterclockwise
+-- All involved faces contain isolated nodes
+--
+INSERT INTO newedge SELECT 25, topology.st_addedgemodface('city_data',
+ 31, 31, 'LINESTRING(19 38, 19 31, 26 38, 19 38)');
+SELECT 'T25', 'E'||edge_id, next_left_edge, next_right_edge,
+ left_face, right_face FROM
+ city_data.edge WHERE edge_id IN (
+ SELECT edge_id FROM newedge WHERE id IN (25, 24, 23, 16)
+ UNION VALUES (2),(3) )
+ ORDER BY edge_id;
+SELECT 'T25', 'N' || node_id, containing_face FROM
+ city_data.node WHERE node_id IN ( 27, 31, 32, 33, 34 )
+ ORDER BY node_id;
---------------------------------------------------------------------
-- Check new relations and faces status
T23|N27|28
T23|N28|23
T23|N29|29
+T24-|N30|28
+T24-|N31|28
+T24-|N32|2
+T24-|N33|28
+T24-|N34|28
+T24|E2|3|39|30|0
+T24|E3|-49|49|30|29
+T24|E42|42|-42|28|2
+T24|E49|48|2|29|30
+T24|E50|50|-50|30|28
+T24|N27|30
+T24|N30|
+T24|N31|30
+T24|N32|2
+T24|N33|28
+T24|N34|30
+T25|E2|3|39|30|0
+T25|E3|-49|49|30|29
+T25|E42|42|-42|28|2
+T25|E49|48|2|29|30
+T25|E50|50|-50|31|28
+T25|E51|51|-51|31|30
+T25|N27|30
+T25|N31|
+T25|N32|2
+T25|N33|28
+T25|N34|31
F3,F4|{3:3,3:4,3:10,3:16,3:17}
F5,N4|{1:4,3:5,3:11}
F0|
F25|POLYGON((9 0,9 6,21 6,21 0,9 0))
F26|POLYGON((35 0,35 6,47 6,47 0,35 0))
F27|POLYGON((35 -4,35 6,47 6,47 -4,35 -4))
-F28|POLYGON((17 30,17 40,31 40,31 30,17 30))
+F28|POLYGON((19.5 32.5,19.5 37.5,24.5 37.5,24.5 32.5,19.5 32.5))
F29|POLYGON((25 30,25 37,29 37,29 30,25 30))
+F30|POLYGON((17 30,17 40,31 40,31 30,17 30))
+F31|POLYGON((19 31,19 38,26 38,26 31,19 31))
Topology 'city_data' dropped
city_data.node WHERE node_id IN ( 27, 28, 29 )
ORDER BY node_id;
+--
+-- Split a face containing an hole, this time with no ring continuity
+-- This version goes clockwise
+-- All involved faces contain isolated nodes
+--
+SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(19.5 37.5)'), 39;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(19 38)'), 39;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 31, 'POINT(20.5 35)'), 31;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(20.5 34)'), 39;
+SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(20.5 33)'), 39;
+
+INSERT INTO newedge SELECT 24, topology.st_addedgenewfaces('city_data',
+ 30, 30, 'LINESTRING(19.5 37.5, 24.5 37.5, 19.5 32.5, 19.5 37.5)');
+SELECT 'T24', 'E'||edge_id, next_left_edge, next_right_edge,
+ left_face, right_face FROM
+ city_data.edge WHERE edge_id IN (
+ SELECT edge_id FROM newedge WHERE id IN (24, 23, 16)
+ UNION VALUES (2),(3) )
+ ORDER BY edge_id;
+SELECT 'T24', 'N' || node_id, containing_face FROM
+ city_data.node WHERE node_id IN ( 27, 30, 31, 32, 33, 34 )
+ ORDER BY node_id;
+
+--
+-- Split a face containing an hole, this time with no ring continuity
+-- This version goes counterclockwise
+-- All involved faces contain isolated nodes
+--
+INSERT INTO newedge SELECT 25, topology.st_addedgenewfaces('city_data',
+ 31, 31, 'LINESTRING(19 38, 19 31, 26 38, 19 38)');
+SELECT 'T25', 'E'||edge_id, next_left_edge, next_right_edge,
+ left_face, right_face FROM
+ city_data.edge WHERE edge_id IN (
+ SELECT edge_id FROM newedge WHERE id IN (25, 24, 23, 16)
+ UNION VALUES (2),(3) )
+ ORDER BY edge_id;
+SELECT 'T25', 'N' || node_id, containing_face FROM
+ city_data.node WHERE node_id IN ( 27, 31, 32, 33, 34 )
+ ORDER BY node_id;
---------------------------------------------------------------------
-- Check new relations and faces status
T23|N27|39
T23|N28|37
T23|N29|40
+T24-|N30|39
+T24-|N31|39
+T24-|N32|31
+T24-|N33|39
+T24-|N34|39
+T24|E2|3|39|42|0
+T24|E3|-49|49|42|40
+T24|E42|42|-42|41|31
+T24|E49|48|2|40|42
+T24|E50|50|-50|42|41
+T24|N27|42
+T24|N30|
+T24|N31|42
+T24|N32|31
+T24|N33|41
+T24|N34|42
+T25|E2|3|39|43|0
+T25|E3|-49|49|43|40
+T25|E42|42|-42|41|31
+T25|E49|48|2|40|43
+T25|E50|50|-50|44|41
+T25|E51|51|-51|44|43
+T25|N27|43
+T25|N31|
+T25|N32|31
+T25|N33|41
+T25|N34|44
F3,F4|{3:10,3:11,3:22,3:24,3:25}
F5,N4|{1:4,3:12,3:13}
F0|
F35|POLYGON((35 0,35 6,47 6,47 0,35 0))
F36|POLYGON((35 -4,35 6,47 6,47 -4,35 -4))
F37|POLYGON((25 34,25 35,27 35,27 34,25 34))
-F39|POLYGON((17 30,17 40,31 40,31 30,17 30))
F40|POLYGON((25 30,25 37,29 37,29 30,25 30))
+F41|POLYGON((19.5 32.5,19.5 37.5,24.5 37.5,24.5 32.5,19.5 32.5))
+F43|POLYGON((17 30,17 40,31 40,31 30,17 30))
+F44|POLYGON((19 31,19 38,26 38,26 31,19 31))
Topology 'city_data' dropped