[GRASS-dev] [bug #3960] (grass) r.watershed: 0's should be NULL for basins, streams

Hamish Bowman via RT grass-bugs at intevation.de
Thu Nov 9 01:44:05 EST 2006


this bug's URL: http://intevation.de/rt/webrt?serial_num=3960

Request number 3960 was commented on by 'hbowman' (Hamish Bowman). 
Responding to this message will send mail to the requestor.
			
			Request Tracker
			rt at intevation.de

--------------------------------------------------------------
Cc: grass-dev at grass.itc.it

[r.watershed: 0's should be NULL for basins,half.basins,streams]

this could be done in ram/close_maps2.c:

/* basins map */
    if (bas_flag) {
        map_fd = G_open_cell_new(bas_name);
        for (r=0; r<nrows; r++) {
	    for (c=0; c<ncols; c++) {
		cellrow[c] = bas[SEG_INDEX(bas_seg, r, c)];
	    }
            G_put_raster_row(map_fd, cellrow, CELL_TYPE);
        }
        G_close_cell(map_fd);
	G_write_colors(bas_name, this_mapset, &colors);
    }

with a test for zero in the for(c=0; c<ncols; c++) loop.

Usually it would be better to put the setting to NULL in the fn that populates
the "bas" array, but AFAIC grasp the data is stored in memory in such a way
that this doesn't make sense -- only cells with real data are stored in memory.
???




for streams map (apparently seg_flag in close_maps2.c), this would be
something like
	    for (c=0; c<ncols; c++) {
		value = FLAG_GET(swale, r, c);
		if (value)
		    cellrow[c] = bas[SEG_INDEX(bas_seg, r, c)];
-		else cellrow[c] = 0;
+               else G_set_c_null_value(cellrow+c, 1); // ??????
	    }
            G_put_raster_row(map_fd, cellrow, CELL_TYPE);
...

or start each new row by init'ing it to all NULL:
G_set_c_null_value(cellrow, ncols);

and then remove the else/*if(value)*/.

I don't know which is more efficient.

??
Hamish



-------------------------------------------- Managed by Request Tracker




More information about the grass-dev mailing list