#ifdef POSTGIS_TOPOLOGY_DEBUG
RAISE DEBUG 'Snapped edge: %', ST_AsText(snapped);
#endif
+ snapped := ST_CollectionExtract(ST_MakeValid(snapped), 2);
+#ifdef POSTGIS_TOPOLOGY_DEBUG
+ RAISE DEBUG 'Cleaned edge: %', ST_AsText(snapped);
+#endif
+
+ -- Check if the so-snapped edge collapsed (see #1650)
+ IF ST_IsEmpty(snapped) THEN
+#ifdef POSTGIS_TOPOLOGY_DEBUG
+ RAISE DEBUG 'Edge collapsed';
+#endif
+ RETURN;
+ END IF;
-- Check if the so-snapped edge _now_ exists
sql := 'SELECT edge_id FROM ' || quote_ident(atopology)
-- See http://trac.osgeo.org/postgis/ticket/1641
-- clean all up first
-DELETE FROM city_data.edge_data;
-DELETE FROM city_data.node;
+DELETE FROM city_data.edge_data; DELETE FROM city_data.node;
DELETE FROM city_data.face where face_id > 0;
SELECT '#1641.1', TopoGeo_addLineString('city_data',
-- Now w/out explicit tolerance (will use local min)
-- clean all up first
-DELETE FROM city_data.edge_data;
-DELETE FROM city_data.node;
+DELETE FROM city_data.edge_data; DELETE FROM city_data.node;
DELETE FROM city_data.face where face_id > 0;
SELECT '#1641.3', TopoGeo_addLineString('city_data',
) ORDER BY 2;
SELECT check_changes();
+-- See http://trac.osgeo.org/postgis/ticket/1650
+
+DELETE FROM city_data.edge_data; DELETE FROM city_data.node;
+DELETE FROM city_data.face where face_id > 0;
+
+SELECT '#1650.1' UNION ALL
+SELECT '#1650.2' || TopoGeo_addLineString('city_data',
+ 'LINESTRING(0 0, 0 1)'
+, 2)::text;
+SELECT check_changes();
+
-- Cleanups
DROP FUNCTION check_changes();
SELECT DropTopology('city_data');