[postgis-commits] svn - r3488 - branches/1.3/lwgeom

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Sun Jan 4 11:31:41 PST 2009


Author: mcayland
Date: 2009-01-04 11:31:41 -0800 (Sun, 04 Jan 2009)
New Revision: 3488

Modified:
   branches/1.3/lwgeom/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: branches/1.3/lwgeom/measures.c
===================================================================
--- branches/1.3/lwgeom/measures.c	2009-01-04 19:24:22 UTC (rev 3487)
+++ branches/1.3/lwgeom/measures.c	2009-01-04 19:31:41 UTC (rev 3488)
@@ -697,7 +697,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 */
@@ -734,6 +734,10 @@
 						lwpoly_deserialize(g2)
 					);
 				}
+				else
+				{
+					lwerror("Unsupported geometry type: %s", lwgeom_typename(t2));
+				}
 			}
 			else if ( t1 == LINETYPE )
 			{
@@ -758,6 +762,10 @@
 						lwpoly_deserialize(g2)
 					);
 				}
+				else
+				{
+					lwerror("Unsupported geometry type: %s", lwgeom_typename(t2));
+				}
 			}
 			else if ( t1 == POLYGONTYPE )
 			{
@@ -782,11 +790,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