From: Sandro Santilli Date: Tue, 6 Mar 2012 09:05:00 +0000 (+0000) Subject: Fix toTopoGeom to actualy _use_ to given tolerance (#1647) X-Git-Tag: 2.0.0beta2~23 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=68ec5d221165fa6f09f57768925920712a8b173d;p=postgis Fix toTopoGeom to actualy _use_ to given tolerance (#1647) git-svn-id: http://svn.osgeo.org/postgis/trunk@9404 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/topology/sql/topogeometry/totopogeom.sql.in.c b/topology/sql/topogeometry/totopogeom.sql.in.c index 006a6566d..3b7ee6bd0 100644 --- a/topology/sql/topogeometry/totopogeom.sql.in.c +++ b/topology/sql/topogeometry/totopogeom.sql.in.c @@ -43,7 +43,7 @@ BEGIN END; -- Get tolerance, if 0 was given - tolerance := COALESCE( NULLIF(tolerance, 0), topology._st_mintolerance(atopology, ageom) ); + tolerance := COALESCE( NULLIF(atolerance, 0), topology._st_mintolerance(atopology, ageom) ); -- Get layer information BEGIN diff --git a/topology/test/regress/totopogeom.sql b/topology/test/regress/totopogeom.sql index 4f5fe68dd..ff44efa08 100644 --- a/topology/test/regress/totopogeom.sql +++ b/topology/test/regress/totopogeom.sql @@ -95,6 +95,42 @@ SELECT ST_AsText(toTopoGeom('POLYGON EMPTY', 'tt', 4)::geometry); SELECT ST_AsText(toTopoGeom('MULTIPOLYGON EMPTY', 'tt', 4)::geometry); SELECT ST_AsText(toTopoGeom('GEOMETRYCOLLECTION EMPTY', 'tt', 5)::geometry); +-- Test with tolerance (expect to snap to POINT(-100 -100) +with inp as ( select +'GEOMETRYCOLLECTION( + POINT(-100 -100.5), + LINESTRING(-100 -90,-90 -90.5), + POLYGON((-100 -80,-89.5 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72.5,-98 -78)) +)' + ::geometry as g), +tg as ( select totopogeom(g, 'tt', 5, 1) as g from inp ) +select 'tolerance_1', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; + +-- Test with tolerance specified in topology record +UPDATE topology.topology SET precision=1 WHERE name = 'tt'; +with inp as ( select +'GEOMETRYCOLLECTION( + POINT(-100 -100.5), + LINESTRING(-100 -90,-90 -90.5), + POLYGON((-100 -80,-89.5 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72.5,-98 -78)) +)' + ::geometry as g), +tg as ( select totopogeom(g, 'tt', 5) as g from inp ) +select 'tolerance_topo_1', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; + +-- Test without tolerance (expect to remain POINT(-100 -100.5) +UPDATE topology.topology SET precision=0 WHERE name = 'tt'; +with inp as ( select +'GEOMETRYCOLLECTION( + POINT(-100 -100.5), + LINESTRING(-100 -90,-90 -90.5), + POLYGON((-100 -80,-89.5 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72.5,-98 -78)) +)' + ::geometry as g), +tg as ( select totopogeom(g, 'tt', 5) as g from inp ) +select 'tolerance_0', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; + + DROP TABLE tt.f_coll; DROP TABLE tt.f_areal; DROP TABLE tt.f_lineal; diff --git a/topology/test/regress/totopogeom_expected b/topology/test/regress/totopogeom_expected index 22dce3ea7..ad4207436 100644 --- a/topology/test/regress/totopogeom_expected +++ b/topology/test/regress/totopogeom_expected @@ -29,4 +29,7 @@ MULTILINESTRING EMPTY MULTIPOLYGON EMPTY MULTIPOLYGON EMPTY GEOMETRYCOLLECTION EMPTY +tolerance_1|0.5 +tolerance_topo_1|0.5 +tolerance_0|0 Topology 'tt' dropped