[GRASS-SVN] r61206 - grass/trunk/raster/r.stream.distance

svn_grass at osgeo.org svn_grass at osgeo.org
Tue Jul 8 20:09:44 PDT 2014


Author: hcho
Date: 2014-07-08 20:09:44 -0700 (Tue, 08 Jul 2014)
New Revision: 61206

Modified:
   grass/trunk/raster/r.stream.distance/distance_calc.c
   grass/trunk/raster/r.stream.distance/distance_init.c
   grass/trunk/raster/r.stream.distance/local_proto.h
   grass/trunk/raster/r.stream.distance/local_vars.h
   grass/trunk/raster/r.stream.distance/main.c
   grass/trunk/raster/r.stream.distance/r.stream.distance.html
Log:
r.stream.distance: Change the output type from FCELL to DCELL for a higher precision (ticket #2359)

Modified: grass/trunk/raster/r.stream.distance/distance_calc.c
===================================================================
--- grass/trunk/raster/r.stream.distance/distance_calc.c	2014-07-09 03:07:37 UTC (rev 61205)
+++ grass/trunk/raster/r.stream.distance/distance_calc.c	2014-07-09 03:09:44 UTC (rev 61206)
@@ -27,18 +27,18 @@
 }
 
 
-int ram_calculate_downstream(CELL ** dirs, FCELL ** distance,
-			     FCELL ** elevation, OUTLET outlet, int outs)
+int ram_calculate_downstream(CELL ** dirs, DCELL ** distance,
+			     DCELL ** elevation, OUTLET outlet, int outs)
 {
 
     int r, c, i, j;
     int next_r, next_c;
     POINT n_cell;
-    float cur_dist = 0;
-    float tmp_dist = 0;
-    float target_elev;		/* eleavation at stream or outlet */
-    float easting, northing;
-    float cell_easting, cell_northing;
+    double cur_dist = 0;
+    double tmp_dist = 0;
+    double target_elev;		/* eleavation at stream or outlet */
+    double easting, northing;
+    double cell_easting, cell_northing;
     struct Cell_head window;
 
     Rast_get_window(&window);
@@ -134,14 +134,14 @@
     int r, c, i, j;
     int next_r, next_c;
     POINT n_cell;
-    float cur_dist = 0;
-    float tmp_dist = 0;
-    float target_elev;		/* eleavation at stream or outlet */
-    float easting, northing;
-    float cell_easting, cell_northing;
+    double cur_dist = 0;
+    double tmp_dist = 0;
+    double target_elev;		/* eleavation at stream or outlet */
+    double easting, northing;
+    double cell_easting, cell_northing;
     CELL dirs_cell;
-    FCELL distance_cell, elevation_cell;
-    FCELL zero_cell = 0;
+    DCELL distance_cell, elevation_cell;
+    DCELL zero_cell = 0;
     struct Cell_head window;
 
     Rast_get_window(&window);
@@ -235,12 +235,12 @@
     return 0;
 }
 
-int ram_fill_basins(OUTLET outlet, FCELL ** distance, CELL ** dirs)
+int ram_fill_basins(OUTLET outlet, DCELL ** distance, CELL ** dirs)
 {
     /* fill empty spaces with zeros but leave -1 as a markers of NULL */
     int r, c, i, j;
     int next_r, next_c;
-    float stop, val;
+    double stop, val;
     POINT n_cell;
 
     tail = 0;
@@ -285,10 +285,10 @@
     /* fill empty spaces with zeros but leave -1 as a markers of NULL */
     int r, c, i, j;
     int next_r, next_c;
-    float stop, val;
+    double stop, val;
     POINT n_cell;
     CELL dirs_cell;
-    FCELL distance_cell;
+    DCELL distance_cell;
 
     tail = 0;
     head = -1;
@@ -331,29 +331,29 @@
     return 0;
 }
 
-int ram_calculate_upstream(FCELL ** distance, CELL ** dirs,
-			   FCELL ** elevation, FCELL ** tmp_elevation,
+int ram_calculate_upstream(DCELL ** distance, CELL ** dirs,
+			   DCELL ** elevation, DCELL ** tmp_elevation,
 			   int near)
 {
     int r, c;
     int next_r, next_c;
-    float easting, northing;
-    float cell_easting, cell_northing;
+    double easting, northing;
+    double cell_easting, cell_northing;
     int i, j, k, d;
     int done;
     int counter;
     int n_inits = 0;
-    float cur_dist;
+    double cur_dist;
     POINT *d_inits;
-    float tmp_dist = 0;
-    float target_elev = 0;
+    double tmp_dist = 0;
+    double target_elev = 0;
     size_t elevation_data_size;
     struct Cell_head window;
 
     Rast_get_window(&window);
 
     if (elevation) {
-	elevation_data_size = Rast_cell_size(FCELL_TYPE);
+	elevation_data_size = Rast_cell_size(DCELL_TYPE);
 	for (r = 0; r < nrows; ++r)
 	    memcpy(tmp_elevation[r], elevation[r],
 		   ncols * elevation_data_size);
@@ -472,27 +472,27 @@
 {
     int r, c;
     int next_r, next_c;
-    float easting, northing;
-    float cell_easting, cell_northing;
+    double easting, northing;
+    double cell_easting, cell_northing;
     int i, j, k, d, d_next;
-    FCELL minus_one_cell = -1;
-    FCELL zero_cell = 0;
+    DCELL minus_one_cell = -1;
+    DCELL zero_cell = 0;
     int done;
     int counter;
     int n_inits = 0;
-    float cur_dist;
+    double cur_dist;
     POINT *d_inits;
-    float tmp_dist = 0;
-    float target_elev = 0;
+    double tmp_dist = 0;
+    double target_elev = 0;
     CELL dirs_cell;
-    FCELL distance_cell, elevation_cell, tmp_elevation_cell;
+    DCELL distance_cell, elevation_cell, tmp_elevation_cell;
     /* size_t elevation_data_size; */
     struct Cell_head window;
 
     Rast_get_window(&window);
 
     if (elevation) {
-        /* elevation_data_size = Rast_cell_size(FCELL_TYPE); */
+        /* elevation_data_size = Rast_cell_size(DCELL_TYPE); */
 	for (r = 0; r < nrows; ++r)
 	    for (c = 0; c < ncols; ++c) {
 		segment_get(elevation, &elevation_cell, r, c);

Modified: grass/trunk/raster/r.stream.distance/distance_init.c
===================================================================
--- grass/trunk/raster/r.stream.distance/distance_init.c	2014-07-09 03:07:37 UTC (rev 61205)
+++ grass/trunk/raster/r.stream.distance/distance_init.c	2014-07-09 03:09:44 UTC (rev 61206)
@@ -126,13 +126,13 @@
     return outlets_num;
 }
 
-int ram_init_distance(CELL ** streams, FCELL ** distance, int outlets_num,
+int ram_init_distance(CELL ** streams, DCELL ** distance, int outlets_num,
 		      int outs)
 {
     int r, c, i;
     /* size_t data_size; 
 
-    data_size = Rast_cell_size(FCELL_TYPE);
+    data_size = Rast_cell_size(DCELL_TYPE);
     */
 
     if (!outs) {		/* stream mode */
@@ -157,9 +157,9 @@
 {
     int r, c, i;
     CELL streams_cell;
-    FCELL distance_cell;
-    FCELL minus_one_cell = -1;
-    FCELL zero_cell = 0;
+    DCELL distance_cell;
+    DCELL minus_one_cell = -1;
+    DCELL zero_cell = 0;
 
     if (!outs) {		/* stream mode */
 	for (r = 0; r < nrows; ++r)
@@ -180,7 +180,7 @@
     return 0;
 }
 
-int ram_prep_null_elevation(FCELL ** distance, FCELL ** elevation)
+int ram_prep_null_elevation(DCELL ** distance, DCELL ** elevation)
 {
 
     int r, c;
@@ -198,7 +198,7 @@
 int seg_prep_null_elevation(SEGMENT * distance, SEGMENT * elevation)
 {
     int r, c;
-    FCELL distance_cell;
+    DCELL distance_cell;
 
     for (r = 0; r < nrows; ++r)
 	for (c = 0; c < ncols; ++c) {

Modified: grass/trunk/raster/r.stream.distance/local_proto.h
===================================================================
--- grass/trunk/raster/r.stream.distance/local_proto.h	2014-07-09 03:07:37 UTC (rev 61205)
+++ grass/trunk/raster/r.stream.distance/local_proto.h	2014-07-09 03:09:44 UTC (rev 61206)
@@ -3,17 +3,17 @@
 
 /* inits */
 int ram_find_outlets(CELL **streams, int number_of_streams, CELL **dirs, int subs, int outs);
-int ram_init_distance(CELL **streams, FCELL **distance, int outlets_num, int outs);
-int ram_prep_null_elevation(FCELL **distance, FCELL **elevation);
+int ram_init_distance(CELL **streams, DCELL **distance, int outlets_num, int outs);
+int ram_prep_null_elevation(DCELL **distance, DCELL **elevation);
 
 int seg_find_outlets(SEGMENT *streams, int number_of_streams, SEGMENT *dirs, int subs, int outs);
 int seg_prep_null_elevation(SEGMENT *distance, SEGMENT *elevation);
 int seg_init_distance(SEGMENT *streams, SEGMENT *distance, int outlets_num, int outs);
 
 /* calculate */
-int ram_calculate_downstream(CELL **dirs, FCELL **distance, FCELL **elevation, OUTLET outlet, int outs);
-int ram_fill_basins(OUTLET outlet, FCELL **distance, CELL **dirs);
-int ram_calculate_upstream(FCELL **distance, CELL **dirs, FCELL **elevation, FCELL **tmp_elevation, int near);
+int ram_calculate_downstream(CELL **dirs, DCELL **distance, DCELL **elevation, OUTLET outlet, int outs);
+int ram_fill_basins(OUTLET outlet, DCELL **distance, CELL **dirs);
+int ram_calculate_upstream(DCELL **distance, CELL **dirs, DCELL **elevation, DCELL **tmp_elevation, int near);
 
 int seg_calculate_downstream (SEGMENT *dirs, SEGMENT *distance, SEGMENT *elevation, OUTLET outlet, int outs);
 int seg_fill_basins(OUTLET outlet, SEGMENT *distance, SEGMENT *dirs);

Modified: grass/trunk/raster/r.stream.distance/local_vars.h
===================================================================
--- grass/trunk/raster/r.stream.distance/local_vars.h	2014-07-09 03:07:37 UTC (rev 61205)
+++ grass/trunk/raster/r.stream.distance/local_vars.h	2014-07-09 03:09:44 UTC (rev 61206)
@@ -22,8 +22,8 @@
 
 typedef struct {
 	int r,c;
-  float cur_dist;
-  float target_elev;
+  double cur_dist;
+  double target_elev;
 } POINT;
 
 GLOBAL int nextr[9];

Modified: grass/trunk/raster/r.stream.distance/main.c
===================================================================
--- grass/trunk/raster/r.stream.distance/main.c	2014-07-09 03:07:37 UTC (rev 61205)
+++ grass/trunk/raster/r.stream.distance/main.c	2014-07-09 03:09:44 UTC (rev 61206)
@@ -147,19 +147,19 @@
 	MAP map_dirs, map_streams, map_distance, map_elevation,
 	    map_tmp_elevation;
 	CELL **streams, **dirs;
-	FCELL **distance;
-	FCELL **elevation = NULL;
-	FCELL **tmp_elevation = NULL;
+	DCELL **distance;
+	DCELL **elevation = NULL;
+	DCELL **tmp_elevation = NULL;
 
 	ram_create_map(&map_streams, CELL_TYPE);
 	ram_read_map(&map_streams, in_stm_opt->answer, 1, CELL_TYPE);
 	ram_create_map(&map_dirs, CELL_TYPE);
 	ram_read_map(&map_dirs, in_dir_opt->answer, 1, CELL_TYPE);
-	ram_create_map(&map_distance, FCELL_TYPE);
+	ram_create_map(&map_distance, DCELL_TYPE);
 
 	streams = (CELL **) map_streams.map;
 	dirs = (CELL **) map_dirs.map;
-	distance = (FCELL **) map_distance.map;
+	distance = (DCELL **) map_distance.map;
 	number_of_streams = (int)map_streams.max + 1;
 
 	outlets_num =
@@ -168,9 +168,9 @@
 	ram_release_map(&map_streams);
 
 	if (in_elev_opt->answer) {
-	    ram_create_map(&map_elevation, FCELL_TYPE);
+	    ram_create_map(&map_elevation, DCELL_TYPE);
 	    ram_read_map(&map_elevation, in_elev_opt->answer, 0, -1);
-	    elevation = (FCELL **) map_elevation.map;
+	    elevation = (DCELL **) map_elevation.map;
 	}			/* map elevation will be replaced by elevation difference map */
 
 
@@ -187,8 +187,8 @@
 	else if (method == UPSTREAM) {
 
 	    if (out_diff_opt->answer) {
-		ram_create_map(&map_tmp_elevation, FCELL_TYPE);
-		tmp_elevation = (FCELL **) map_tmp_elevation.map;
+		ram_create_map(&map_tmp_elevation, DCELL_TYPE);
+		tmp_elevation = (DCELL **) map_tmp_elevation.map;
 	    }
 
 	    for (j = 0; j < outlets_num; ++j)
@@ -203,12 +203,12 @@
 
 	if (out_diff_opt->answer) {
 	    ram_prep_null_elevation(distance, elevation);
-	    ram_write_map(&map_elevation, out_diff_opt->answer, FCELL_TYPE, 1,
+	    ram_write_map(&map_elevation, out_diff_opt->answer, DCELL_TYPE, 1,
 			  -1);
 	}
 
 	if (out_dist_opt->answer)
-	    ram_write_map(&map_distance, out_dist_opt->answer, FCELL_TYPE, 1,
+	    ram_write_map(&map_distance, out_dist_opt->answer, DCELL_TYPE, 1,
 			  -1);
 
 	ram_release_map(&map_dirs);
@@ -240,7 +240,7 @@
 	seg_create_map(&map_dirs, SROWS, SCOLS, number_of_segs, CELL_TYPE);
 	seg_read_map(&map_dirs, in_dir_opt->answer, 1, CELL_TYPE);
 	seg_create_map(&map_distance, SROWS, SCOLS, number_of_segs,
-		       FCELL_TYPE);
+		       DCELL_TYPE);
 
 	streams = &map_streams.seg;
 	dirs = &map_dirs.seg;
@@ -254,7 +254,7 @@
 
 	if (in_elev_opt->answer) {
 	    seg_create_map(&map_elevation, SROWS, SCOLS, number_of_segs,
-			   FCELL_TYPE);
+			   DCELL_TYPE);
 	    seg_read_map(&map_elevation, in_elev_opt->answer, 0, -1);
 	    elevation = &map_elevation.seg;
 	}			/* map elevation will be replaced by elevation difference map */
@@ -273,7 +273,7 @@
 
 	    if (out_diff_opt->answer) {
 		seg_create_map(&map_tmp_elevation, SROWS, SCOLS,
-			       number_of_segs, FCELL_TYPE);
+			       number_of_segs, DCELL_TYPE);
 		tmp_elevation = &map_tmp_elevation.seg;
 	    }
 
@@ -288,12 +288,12 @@
 	}			/* end methods */
 
 	if (out_dist_opt->answer)
-	    seg_write_map(&map_distance, out_dist_opt->answer, FCELL_TYPE, 1,
+	    seg_write_map(&map_distance, out_dist_opt->answer, DCELL_TYPE, 1,
 			  -1);
 
 	if (out_diff_opt->answer) {
 	    seg_prep_null_elevation(distance, elevation);
-	    seg_write_map(&map_elevation, out_diff_opt->answer, FCELL_TYPE, 1,
+	    seg_write_map(&map_elevation, out_diff_opt->answer, DCELL_TYPE, 1,
 			  -1);
 	}
 

Modified: grass/trunk/raster/r.stream.distance/r.stream.distance.html
===================================================================
--- grass/trunk/raster/r.stream.distance/r.stream.distance.html	2014-07-09 03:07:37 UTC (rev 61205)
+++ grass/trunk/raster/r.stream.distance/r.stream.distance.html	2014-07-09 03:09:44 UTC (rev 61206)
@@ -85,11 +85,11 @@
 
 <dt><b>difference</b></dt>
 <dd>Name of output map of elevation difference to the target (outlet, node, 
-stream, divide, maximum) along watercoures. The map is of FCELL type.</dd>
+stream, divide, maximum) along watercoures. The map is of DCELL type.</dd>
 
 <dt><b>distance</b></dt>
 <dd>Name of output map of distance to the target (outlet, node, stream, 
-divide, maximum) along watercoures. The map is of FCELL type.</dd>
+divide, maximum) along watercoures. The map is of DCELL type.</dd>
 </dl>
 
 <h2>NOTES</h2>



More information about the grass-commit mailing list