]> granicus.if.org Git - postgis/commitdiff
Fix for collection vs collection distance behavior. Per Nicklas Avén. GBT #146
authorPaul Ramsey <pramsey@cleverelephant.ca>
Sun, 5 Apr 2009 16:47:33 +0000 (16:47 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Sun, 5 Apr 2009 16:47:33 +0000 (16:47 +0000)
git-svn-id: http://svn.osgeo.org/postgis/branches/1.3@3966 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/measures.c

index 9c9d31d171ac158e5e162ed0361dd8203f0656b0..fcc7570c5ce45ffbb2cfc201fcf304400f59370c 100644 (file)
@@ -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));