--
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+/* #define POSTGIS_TOPOLOGY_DEBUG 1 */
+
-- {
-- Convert a simple geometry to a topologically-defined one
--
DECLARE
layer_info RECORD;
topology_info RECORD;
- rec RECORD;
- rec2 RECORD;
tg topology.TopoGeometry;
- elems INT[][];
- elem INT[];
- sql TEXT;
typ TEXT;
BEGIN
topology_info RECORD;
rec RECORD;
rec2 RECORD;
- elem INT[];
- elems INT[][];
+ elem TEXT;
+ elems TEXT[];
sql TEXT;
typ TEXT;
tolerance FLOAT8;
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
WHERE t.id = -1 AND r.layer_id = 4 AND r.topogeo_id = id(t.g)
GROUP BY id(t.g), st_area(t.g);
+-- 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;