]> granicus.if.org Git - postgis/commitdiff
#2636, Regress ST_Distance_Sphere between 2.1.2dev and 2.0.4 with 2D
authorPaul Ramsey <pramsey@cleverelephant.ca>
Sat, 8 Mar 2014 00:45:32 +0000 (00:45 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Sat, 8 Mar 2014 00:45:32 +0000 (00:45 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@12307 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/lwgeodetic.c
liblwgeom/lwgeodetic_tree.c

index 214d64db6a62c15acfa49af068d0ffcc461721bb..be5a9255bbed026b1c5661b8109a303340fbc1bb 100644 (file)
@@ -1815,7 +1815,13 @@ static double ptarray_distance_spheroid(const POINTARRAY *pa1, const POINTARRAY
                        e1.start = e1.end;
                }
 
-               return spheroid_distance(&g1, &nearest2, s);
+               /* On sphere, return answer */
+               if ( use_sphere )
+                       return distance;
+               /* On spheroid, calculate final answer based on closest approach */
+               else
+                       return spheroid_distance(&g1, &nearest2, s);
+
        }
 
        /* Initialize start of line 1 */
index 19da35aed96445cfa54afd74592eac177cb55b6d..383f6ac7536f43c55f80eacfd22f5088d7db5766 100644 (file)
@@ -522,13 +522,19 @@ circ_tree_distance_tree(const CIRC_NODE* n1, const CIRC_NODE* n2, const SPHEROID
        double min_dist = MAXFLOAT;
        double max_dist = MAXFLOAT;
        GEOGRAPHIC_POINT closest1, closest2;
-       double distance2;
        double threshold_radians = threshold / spheroid->radius;
        
        circ_tree_distance_tree_internal(n1, n2, threshold_radians, &min_dist, &max_dist, &closest1, &closest2);
-       distance2 = spheroid_distance(&closest1, &closest2, spheroid);
 
-       return distance2;
+       /* Spherical case */
+       if ( spheroid->a == spheroid->b )
+       {
+               return spheroid->radius * sphere_distance(&closest1, &closest2);
+       }
+       else
+       {
+               return spheroid_distance(&closest1, &closest2, spheroid);               
+       }
 }
 
 static double