1CREATE FUNCTION test(geom geometry, wrap float8, amount float8, exp geometry) 2RETURNS text AS $$ 3DECLARE 4 obt geometry; 5BEGIN 6 obt = ST_Normalize(ST_WrapX(geom, wrap, amount)); 7 IF ST_OrderingEquals(obt, exp) THEN 8 RETURN 'OK'; 9 ELSE 10 RETURN 'KO:' || ST_AsEWKT(obt) || ' != ' || ST_AsEWKT(exp); 11 END IF; 12END 13$$ LANGUAGE plpgsql; 14 15SELECT 'P1', test( 16 'POINT(0 0)', 2, 10, 17 'POINT(10 0)'); 18 19SELECT 'P2', test( 20 'POINT(0 0)', 2, -10, 21 'POINT(0 0)'); 22 23SELECT 'P3', test( 24 'POINT(0 0)', -2, -10, 25 'POINT(-10 0)'); 26 27SELECT 'L1', test( 28 'LINESTRING(0 0,10 0)', 2, 10, 29 --'LINESTRING(2 0,12 0)'); 30 'MULTILINESTRING((10 0,12 0),(2 0,10 0))'); 31 32SELECT 'L2', test( 33 'LINESTRING(0 0,10 0)', 8, -10, 34 'MULTILINESTRING((0 0,8 0),(-2 0,0 0))'); 35 36SELECT 'L3', test( 37 'LINESTRING(0 0,10 0)', 0, 10, 38 'LINESTRING(0 0,10 0)'); 39 40SELECT 'L4', test( 41 'LINESTRING(0 0,10 0)', 10, -10, 42 'LINESTRING(0 0,10 0)'); 43 44SELECT 'ML1', test( 45 'MULTILINESTRING((-10 0,0 0),(0 0,10 0))', 0, 20, 46 'MULTILINESTRING((10 0,20 0),(0 0,10 0))'); 47 48SELECT 'ML2', test( 49 'MULTILINESTRING((-10 0,0 0),(0 0,10 0))', 0, -20, 50 'MULTILINESTRING((-10 0,0 0),(-20 0,-10 0))'); 51 52SELECT 'ML3', test( 53 'MULTILINESTRING((10 0,5 0),(-10 0,0 0),(0 0,5 0))', 0, -20, 54 'MULTILINESTRING((-10 0,0 0),(-15 0,-10 0),(-20 0,-15 0))'); 55 56SELECT 'A1', test( 57 'POLYGON((0 0,10 0,10 10,0 10,0 0), 58 (1 2,3 2,3 4,1 4,1 2), 59 (4 2,6 2,6 4,4 4,4 2), 60 (7 2,9 2,9 4,7 4,7 2))', 5, 10, 61 'POLYGON((5 0,5 2,6 2,6 4,5 4,5 10,10 10,15 10,15 4,14 4,14 2,15 2,15 0,10 0,5 0), 62 (11 2,13 2,13 4,11 4,11 2), 63 (7 2,9 2,9 4,7 4,7 2))'); 64 65SELECT 'A2', test( 66 'POLYGON((0 0,10 0,10 10,0 10,0 0), 67 (1 2,3 2,3 4,1 4,1 2), 68 (4 2,6 2,6 4,4 4,4 2), 69 (7 2,9 2,9 4,7 4,7 2))', 5, -10, 70 'POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0), 71 (1 2,3 2,3 4,1 4,1 2), 72 (-3 2,-1 2,-1 4,-3 4,-3 2))'); 73 74SELECT 'C1', test( 75 'GEOMETRYCOLLECTION( 76 POLYGON((0 0,10 0,10 10,0 10,0 0), 77 (1 2,3 2,3 4,1 4,1 2), 78 (4 2,6 2,6 4,4 4,4 2), 79 (7 2,9 2,9 4,7 4,7 2)), 80 POINT(2 20), 81 POINT(7 -20), 82 LINESTRING(0 40,10 40) 83 )', 84 5, -10, 85 'GEOMETRYCOLLECTION( 86 POLYGON((-5 0,-5 2,-4 2,-4 4,-5 4,-5 10,0 10,5 10,5 4,4 4,4 2,5 2,5 0,0 0,-5 0), 87 (1 2,3 2,3 4,1 4,1 2), 88 (-3 2,-1 2,-1 4,-3 4,-3 2)), 89 MULTILINESTRING((0 40,5 40),(-5 40,0 40)), 90 POINT(2 20), 91 POINT(-3 -20) 92 )'); 93 94DROP FUNCTION test(geometry, float8, float8, geometry); 95