From: Paul Ramsey Date: Sun, 5 Apr 2009 16:47:33 +0000 (+0000) Subject: Fix for collection vs collection distance behavior. Per Nicklas Avén. GBT #146 X-Git-Tag: 1.3.6rc1~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6c31e42c84747810c29b9ee50c2e2dc9b3412213;p=postgis Fix for collection vs collection distance behavior. Per Nicklas Avén. GBT #146 git-svn-id: http://svn.osgeo.org/postgis/branches/1.3@3966 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/lwgeom/measures.c b/lwgeom/measures.c index 9c9d31d17..fcc7570c5 100644 --- a/lwgeom/measures.c +++ b/lwgeom/measures.c @@ -711,6 +711,16 @@ lwgeom_mindistance2d_recursive_tolerance(uchar *lw1, uchar *lw2, double toleranc uchar *g2 = lwgeom_getsubgeometry_inspected(in2, j); int t2 = lwgeom_getType(g2[0]); + /* Argument 2 is a multitype... recurse */ + if ( lwgeom_contains_subgeoms(t2) ) + { + dist = lwgeom_mindistance2d_recursive_tolerance(g1, g2, tolerance); + if ( dist <= tolerance ) return tolerance; /* can't be closer */ + if ( mindist == -1 ) mindist = dist; + else mindist = LW_MIN(dist, mindist); + continue; + } + if ( t1 == POINTTYPE ) { if ( t2 == POINTTYPE ) @@ -795,10 +805,6 @@ lwgeom_mindistance2d_recursive_tolerance(uchar *lw1, uchar *lw2, double toleranc lwerror("Unsupported geometry type: %s", lwgeom_typename(t2)); } } - else if (lwgeom_contains_subgeoms(t1)) /* it's a multitype... recurse */ - { - dist = lwgeom_mindistance2d_recursive_tolerance(g1, g2, tolerance); - } else { lwerror("Unsupported geometry type: %s", lwgeom_typename(t1));