snapedge GEOMETRY;
snaptol FLOAT8;
tol FLOAT8;
+ z FLOAT8;
BEGIN
-- 0. Check arguments
IF rec IS NOT NULL THEN
-- project point to line, split edge by point
prj := ST_ClosestPoint(rec.geom, apoint);
+ -- This is a workaround for ClosestPoint lack of Z support:
+ -- http://trac.osgeo.org/postgis/ticket/2033
+ z := ST_Z(apoint);
+ IF z IS NOT NULL THEN
+ prj := ST_Translate(ST_Force_3DZ(prj), 0, 0, z); -- no ST_SetZ ...
+ END IF;
#ifdef POSTGIS_TOPOLOGY_DEBUG
RAISE DEBUG 'Splitting edge % with closest point %', rec.edge_id, ST_AsText(prj);
#endif
ORDER BY n.edge_id;
SELECT DropTopology('city_data');
+
+-- See http://trac.osgeo.org/postgis/ticket/2033
+SELECT 'tt2033.start', CreateTopology('t',0,0,true) > 0;
+SELECT 'tt2033', 'E' || topogeo_addlinestring('t', 'LINESTRING(0 0 0,0 1 0,0 2 1)');
+SELECT 'tt2033', 'N' || topogeo_addpoint('t', 'POINT(0.2 1 1)', 0.5);
+SELECT 'tt2033', 'NC', node_id, ST_AsText(geom) FROM t.node ORDER BY node_id;
+SELECT 'tt2033.end' || DropTopology('t');
E|2|2|25
E|27|25|2
Topology 'city_data' dropped
+tt2033.start|t
+tt2033|E1
+tt2033|N3
+tt2033|NC|1|POINT Z (0 0 0)
+tt2033|NC|2|POINT Z (0 2 1)
+tt2033|NC|3|POINT Z (0 1 1)
+tt2033.endTopology 't' dropped