[postgis-commits] svn - r3487 - trunk/liblwgeom

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Sun Jan 4 11:24:23 PST 2009


Author: mcayland
Date: 2009-01-04 11:24:22 -0800 (Sun, 04 Jan 2009)
New Revision: 3487

Modified:
   trunk/liblwgeom/measures.c
Log:
Commit quick fix for GBT#85: ST_Distance crashes on Circular String. Rather than devise and implement a set of distance functions for CIRCULARSTRINGs, I've simply added code to detect the condition and throw an "Unsupported geometry type" error, similar to as already exists within the codebase.


Modified: trunk/liblwgeom/measures.c
===================================================================
--- trunk/liblwgeom/measures.c	2009-01-02 13:25:31 UTC (rev 3486)
+++ trunk/liblwgeom/measures.c	2009-01-04 19:24:22 UTC (rev 3487)
@@ -666,7 +666,7 @@
 		double dist=tolerance;
 
 		/* it's a multitype... recurse */
-		if ( t1 >= 4 )
+		if ( lwgeom_contains_subgeoms(t1) )
 		{
 			dist = lwgeom_mindistance2d_recursive_tolerance(g1, lw2, tolerance);
 			if ( dist <= tolerance ) return tolerance; /* can't be closer */
@@ -703,6 +703,10 @@
 						lwpoly_deserialize(g2)
 					);
 				}
+				else
+				{
+					lwerror("Unsupported geometry type: %s", lwgeom_typename(t2));
+				}	
 			}
 			else if ( t1 == LINETYPE )
 			{
@@ -727,6 +731,10 @@
 						lwpoly_deserialize(g2)
 					);
 				}
+				else
+				{
+					lwerror("Unsupported geometry type: %s", lwgeom_typename(t2));
+				}	
 			}
 			else if ( t1 == POLYGONTYPE )
 			{
@@ -751,11 +759,19 @@
 						lwpoly_deserialize(g1)
 					);
 				}
+				else
+				{
+					lwerror("Unsupported geometry type: %s", lwgeom_typename(t2));
+				}	
 			}
-			else /* it's a multitype... recurse */
+			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));
+			}
 
 			if (mindist == -1 ) mindist = dist;
 			else mindist = LW_MIN(dist, mindist);



More information about the postgis-commits mailing list