[GRASS-SVN] r73823 - grass/trunk/vector/v.distance

svn_grass at osgeo.org svn_grass at osgeo.org
Sat Dec 22 08:54:46 PST 2018


Author: mmetz
Date: 2018-12-22 08:54:46 -0800 (Sat, 22 Dec 2018)
New Revision: 73823

Modified:
   grass/trunk/vector/v.distance/main.c
Log:
v.distance: improve iterative search, fix for dmax

Modified: grass/trunk/vector/v.distance/main.c
===================================================================
--- grass/trunk/vector/v.distance/main.c	2018-12-21 21:41:41 UTC (rev 73822)
+++ grass/trunk/vector/v.distance/main.c	2018-12-22 16:54:46 UTC (rev 73823)
@@ -460,8 +460,8 @@
 	/* max 9 steps from testing */
 	if (n_max_steps > 9)
 	    n_max_steps = 9;
-	if (n_max_steps < 2)
-	    n_max_steps = 2;
+	if (n_max_steps < 3)
+	    n_max_steps = 3;
 	if (n_max_steps > nto)
 	    n_max_steps = nto;
 
@@ -469,6 +469,9 @@
 	G_debug(2, "maximum reasonable search distance = %g", max_map);
 	G_debug(2, "n 'to' features = %d", nto);
 	G_debug(2, "n_max_steps = %d", n_max_steps);
+
+	if (!geodesic)
+	    max_map = max;
     }
 
     if (min > max)
@@ -487,7 +490,7 @@
 	    /* for 9 steps, this would be max / [128, 64, 32, 16, 8, 4, 2] */
 	    max_step[curr_step] = max_map / (2 << (n_max_steps - 1 - curr_step));
 	}
-	/* last step always max */
+	/* last step always max_map */
 	max_step[n_max_steps - 1] = max_map;
 	j = 1;
 	for (i = 1; i < n_max_steps; i++) {
@@ -497,6 +500,9 @@
 	    }
 	}
 	n_max_steps = j;
+	for (i = 0; i < n_max_steps; i++) {
+	    G_debug(2, "max step %d: %g", i, max_step[i]);
+	}
     }
     else {
 	max_step = G_malloc(sizeof(double));
@@ -503,20 +509,6 @@
 	max_step[0] = max_map;
     }
 
-    if (max > 0) {
-	G_debug(2, "reduce max steps");
-	for (i = 0; i < n_max_steps; i++) {
-	    if (max_step[i] > max) {
-		if (i == 1) {
-		    i = 0;
-		}
-		n_max_steps = i + 1;
-		max_step[i] = max;
-		break;
-	    }
-	}
-    }
-
     /* Open database driver */
     db_init_string(&stmt);
     db_init_string(&dbstr);



More information about the grass-commit mailing list