[postgis-tickets] r14368 - Fix toTopoGeom loss of low-id primitives from TopoGeometry definition
Sandro Santilli
strk at keybit.net
Sat Nov 7 01:57:38 PST 2015
Author: strk
Date: 2015-11-07 01:57:38 -0800 (Sat, 07 Nov 2015)
New Revision: 14368
Modified:
branches/2.0/topology/sql/topogeometry/totopogeom.sql.in.c
branches/2.0/topology/test/regress/totopogeom.sql
branches/2.0/topology/test/regress/totopogeom_expected
Log:
Fix toTopoGeom loss of low-id primitives from TopoGeometry definition
Affects toTopoGeom on including edge with id=2 and face with id=3
Includes tests.
Fixes #3359
Modified: branches/2.0/topology/sql/topogeometry/totopogeom.sql.in.c
===================================================================
--- branches/2.0/topology/sql/topogeometry/totopogeom.sql.in.c 2015-11-06 21:40:40 UTC (rev 14367)
+++ branches/2.0/topology/sql/topogeometry/totopogeom.sql.in.c 2015-11-07 09:57:38 UTC (rev 14368)
@@ -10,6 +10,8 @@
--
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#define POSTGIS_TOPOLOGY_DEBUG 1
+
-- {
-- Convert a simple geometry to a topologically-defined one
--
@@ -26,8 +28,8 @@
rec RECORD;
rec2 RECORD;
tg topology.TopoGeometry;
- elems INT[][];
- elem INT[];
+ elems TEXT[];
+ elem TEXT;
sql TEXT;
typ TEXT;
tolerance FLOAT8;
@@ -134,10 +136,11 @@
topology.topogeo_addPolygon(atopology, rec.geom, tolerance)
END as primitive
LOOP
- elem := ARRAY[rec.dims+1, rec2.primitive];
+ elem := ARRAY[rec.dims+1, rec2.primitive]::text;
IF elems @> ARRAY[elem] THEN
#ifdef POSTGIS_TOPOLOGY_DEBUG
RAISE DEBUG 'Elem % already in %', elem, elems;
+RAISE DEBUG '% @> ARRAY[%] returned true', elems, elem;
#endif
ELSE
#ifdef POSTGIS_TOPOLOGY_DEBUG
Modified: branches/2.0/topology/test/regress/totopogeom.sql
===================================================================
--- branches/2.0/topology/test/regress/totopogeom.sql 2015-11-06 21:40:40 UTC (rev 14367)
+++ branches/2.0/topology/test/regress/totopogeom.sql 2015-11-07 09:57:38 UTC (rev 14368)
@@ -182,6 +182,26 @@
tg as ( select totopogeom(g, 'tt', 3) as g from inp )
SELECT '#1968.2', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg;
+-- http://trac.osgeo.org/postgis/ticket/3359
+-- NOTE: requires identifier of the second edge to be 2
+TRUNCATE tt.relation CASCADE;
+TRUNCATE tt.edge_data CASCADE;
+TRUNCATE tt.node CASCADE;
+DELETE FROM tt.face WHERE face_id > 0;
+SELECT '#3359.setval',
+ setval('tt.edge_data_edge_id_seq', 1, false),
+ -- face_id is intentionally set to 2
+ setval('tt.face_face_id_seq', 2, false),
+ setval('tt.node_node_id_seq', 1, false);
+SELECT '#3359.line.1', ST_Length(toTopoGeom('LINESTRING (0 0,1 0)'
+::geometry, 'tt', 3));
+SELECT '#3359.line.2', ST_Length(toTopoGeom('LINESTRING (0 0,1 0,1 1)'
+::geometry, 'tt', 3));
+SELECT '#3359.area.1', ST_Area(toTopoGeom('POLYGON ((0 0,1 0,1 1,0 1,0 0))'
+::geometry, 'tt', 4));
+SELECT '#3359.area.2', ST_Area(toTopoGeom('POLYGON ((0 0,1 0,1 2,0 2,0 0))'
+::geometry, 'tt', 4));
+
DROP TABLE tt.f_coll;
DROP TABLE tt.f_areal;
DROP TABLE tt.f_lineal;
Modified: branches/2.0/topology/test/regress/totopogeom_expected
===================================================================
--- branches/2.0/topology/test/regress/totopogeom_expected 2015-11-06 21:40:40 UTC (rev 14367)
+++ branches/2.0/topology/test/regress/totopogeom_expected 2015-11-07 09:57:38 UTC (rev 14368)
@@ -41,4 +41,9 @@
#1790.3|0|0
#1968.1|0
#1968.2|0
+#3359.setval|1|2|1
+#3359.line.1|1
+#3359.line.2|2
+#3359.area.1|1
+#3359.area.2|2
Topology 'tt' dropped
More information about the postgis-tickets
mailing list