]> granicus.if.org Git - postgis/commitdiff
ST_ModEdgeHeal: move check for TopoGeometry after check for connected edges. Fixes...
authorSandro Santilli <strk@keybit.net>
Fri, 6 May 2011 21:39:46 +0000 (21:39 +0000)
committerSandro Santilli <strk@keybit.net>
Fri, 6 May 2011 21:39:46 +0000 (21:39 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@7109 b70326c6-7e19-0410-871a-916f4a2858ee

topology/sql/sqlmm.sql
topology/test/regress/st_modedgeheal.sql
topology/test/regress/st_modedgeheal_expected

index 28d1b3fc3c4debbd53ecf5797f69847aa9dc1769..7d749095148a6723e40ba5ddf71817de467c525e 100644 (file)
@@ -180,6 +180,32 @@ BEGIN
     -- NOTE: checks for INVALID_SCHEMA_NAME or UNDEFINED_TABLE done before
   END;
 
+
+  -- NOT IN THE SPECS: See if any of the two edges are closed.
+  IF e1rec.start_node = e1rec.end_node THEN
+    RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e1id, e2id;
+  END IF;
+  IF e2rec.start_node = e2rec.end_node THEN
+    RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e2id, e1id;
+  END IF;
+
+  -- Find common node
+  IF e1rec.end_node = e2rec.start_node THEN
+    commonnode = e1rec.end_node;
+    caseno = 1;
+  ELSIF e1rec.end_node = e2rec.end_node THEN
+    commonnode = e1rec.end_node;
+    caseno = 2;
+  ELSIF e1rec.start_node = e2rec.start_node THEN
+    commonnode = e1rec.start_node;
+    caseno = 3;
+  ELSIF e1rec.start_node = e2rec.end_node THEN
+    commonnode = e1rec.start_node;
+    caseno = 4;
+  ELSE
+    RAISE EXCEPTION 'SQL/MM Spatial exception – non-connected edges';
+  END IF;
+
   -- NOT IN THE SPECS:
   -- check if any topo_geom is defined only by one of the
   -- input edges. In such case there would be no way to adapt
@@ -207,31 +233,6 @@ BEGIN
   END LOOP;
 
 
-  -- NOT IN THE SPECS: See if any of the two edges are closed.
-  IF e1rec.start_node = e1rec.end_node THEN
-    RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e1id, e2id;
-  END IF;
-  IF e2rec.start_node = e2rec.end_node THEN
-    RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e2id, e1id;
-  END IF;
-
-  -- Find common node
-  IF e1rec.end_node = e2rec.start_node THEN
-    commonnode = e1rec.end_node;
-    caseno = 1;
-  ELSIF e1rec.end_node = e2rec.end_node THEN
-    commonnode = e1rec.end_node;
-    caseno = 2;
-  ELSIF e1rec.start_node = e2rec.start_node THEN
-    commonnode = e1rec.start_node;
-    caseno = 3;
-  ELSIF e1rec.start_node = e2rec.end_node THEN
-    commonnode = e1rec.start_node;
-    caseno = 4;
-  ELSE
-    RAISE EXCEPTION 'SQL/MM Spatial exception – non-connected edges';
-  END IF;
-
   -- Check if any other edge is connected to the common node
   FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(toponame)
     || '.edge_data WHERE ( edge_id != ' || e1id
index 830a1bbef9294275cde19e9fb75214c21a425cb6..2d4038b277e8aa60d738aa8654b65e482dcf944f 100644 (file)
@@ -100,6 +100,9 @@ SELECT r.topogeo_id, r.element_id
 -- 'F+E3-E4' and 'F-E3+E4'
 SELECT 'MH(3,4)', topology.ST_ModEdgeHeal('t', 3, 4);
 
+-- This is for ticket #942
+SELECT topology.ST_ModEdgeHeal('t', 1, 3);
+
 SELECT r.topogeo_id, r.element_id
   FROM t.relation r, t.f f WHERE 
   r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g)
index 547f6dfe2862dacd030965b4d967da9d03bceb90..e71719ff6444a53c255ec454a2bec249b2dac565 100644 (file)
@@ -116,6 +116,7 @@ E4
 3|4
 3|-3
 MH(3,4)|5
+ERROR:  SQL/MM Spatial exception – non-connected edges
 2|3
 3|-3
 Topology 't' dropped