From: Sandro Santilli Date: Wed, 6 Mar 2013 15:20:48 +0000 (+0000) Subject: Allow adding points at precision distance with TopoGeo_addPoint X-Git-Tag: 2.1.0beta2~183 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7373c86a6ee5f998fd1fd45db819ff4f91684c0c;p=postgis Allow adding points at precision distance with TopoGeo_addPoint git-svn-id: http://svn.osgeo.org/postgis/trunk@11149 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/topology/sql/populate.sql.in.c b/topology/sql/populate.sql.in.c index 4b0d1970e..1e2e3119d 100644 --- a/topology/sql/populate.sql.in.c +++ b/topology/sql/populate.sql.in.c @@ -706,13 +706,15 @@ BEGIN -- Get tolerance, if 0 was given tol := COALESCE( NULLIF(tolerance, 0), topology._st_mintolerance(atopology, apoint) ); - -- 1. Check if any existing node falls within tolerance + -- 1. Check if any existing node is closer than the given precision -- and if so pick the closest sql := 'SELECT a.node_id FROM ' || quote_ident(atopology) || '.node as a WHERE ST_DWithin(a.geom,' || quote_literal(apoint::text) || '::geometry,' - || tol || ') ORDER BY ST_Distance(' + || tol || ') AND ST_Distance(' + || quote_literal(apoint::text) + || '::geometry, a.geom) < ' || tol || ' ORDER BY ST_Distance(' || quote_literal(apoint::text) || '::geometry, a.geom) LIMIT 1;'; #ifdef POSTGIS_TOPOLOGY_DEBUG diff --git a/topology/test/regress/topogeo_addpoint.sql b/topology/test/regress/topogeo_addpoint.sql index 5275ff535..99cd81f96 100644 --- a/topology/test/regress/topogeo_addpoint.sql +++ b/topology/test/regress/topogeo_addpoint.sql @@ -46,6 +46,11 @@ SELECT 'E', n.edge_id, n.start_node, n.end_node OR n.end_node > m.max ORDER BY n.edge_id; +-- Test precision +SELECT 'prec1', 'N' || topogeo_addpoint('city_data', 'POINT(39 26)', 2); +SELECT 'prec2', 'N' || topogeo_addpoint('city_data', 'POINT(39 26)', 1); +SELECT 'prec3', 'N' || topogeo_addpoint('city_data', 'POINT(36 26)', 1); + SELECT DropTopology('city_data'); -- See http://trac.osgeo.org/postgis/ticket/2033 @@ -54,3 +59,4 @@ 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'); + diff --git a/topology/test/regress/topogeo_addpoint_expected b/topology/test/regress/topogeo_addpoint_expected index af6e614de..ce32d19ae 100644 --- a/topology/test/regress/topogeo_addpoint_expected +++ b/topology/test/regress/topogeo_addpoint_expected @@ -19,6 +19,9 @@ N|24|3|POINT(16 18) N|25||POINT(26 30) E|2|2|25 E|27|25|2 +prec1|N23 +prec2|N26 +prec3|N27 Topology 'city_data' dropped tt2033.start|t tt2033|E1