Преглед изворни кода

r.viewshed: fix binary output for external memory mode (https://trac.osgeo.org/grass/ticket/1788)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@71681 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz пре 7 година
родитељ
комит
2c2fa15239
3 измењених фајлова са 12 додато и 6 уклоњено
  1. 6 3
      raster/r.viewshed/grass.cpp
  2. 2 1
      raster/r.viewshed/grass.h
  3. 4 2
      raster/r.viewshed/visibility.cpp

+ 6 - 3
raster/r.viewshed/grass.cpp

@@ -782,7 +782,6 @@ save_vis_elev_to_GRASS(Grid * visgrid, char *elevfname, char *visfname,
 /* helper function to deal with GRASS writing to a row buffer */
 void writeValue(void *bufrast, int j, double x, RASTER_MAP_TYPE data_type)
 {
-
     switch (data_type) {
     case CELL_TYPE:
 	((CELL *) bufrast)[j] = (CELL) x;
@@ -824,7 +823,8 @@ void writeNodataValue(void *bufrast, int j, RASTER_MAP_TYPE data_type)
 void
 save_io_visibilitygrid_to_GRASS(IOVisibilityGrid * visgrid,
 				char *fname, RASTER_MAP_TYPE type,
-				float (*fun) (float))
+				float (*fun) (float),
+				OutputMode mode)
 {
 
     G_message(_("Saving grid to <%s>"), fname);
@@ -878,7 +878,10 @@ save_io_visibilitygrid_to_GRASS(IOVisibilityGrid * visgrid,
 	    }
 	    else {
 		/*  this cell is not in stream, so it is invisible */
-		writeNodataValue(visrast, j, type);
+		if (mode == OUTPUT_BOOL)
+		    writeValue(visrast, j, BOOL_INVISIBLE, type);
+		else if (mode == OUTPUT_ANGLE)
+		    writeNodataValue(visrast, j, type);
 	    }
 	}			/* for j */
 

+ 2 - 1
raster/r.viewshed/grass.h

@@ -136,7 +136,8 @@ save_vis_elev_to_GRASS(Grid * visgrid, char *elevfname, char *visfname,
 void
 save_io_visibilitygrid_to_GRASS(IOVisibilityGrid * visgrid,
 				char *outfname, RASTER_MAP_TYPE type,
-				float (*fun) (float));
+				float (*fun) (float),
+				OutputMode mode);
 
 
 

+ 4 - 2
raster/r.viewshed/visibility.cpp

@@ -401,11 +401,13 @@ save_io_visibilitygrid(IOVisibilityGrid * visgrid,
 
     if (viewOptions.outputMode == OUTPUT_BOOL)
 	save_io_visibilitygrid_to_GRASS(visgrid, viewOptions.outputfname,
-					CELL_TYPE, booleanVisibilityOutput);
+					CELL_TYPE, booleanVisibilityOutput,
+					OUTPUT_BOOL);
 
     else if (viewOptions.outputMode == OUTPUT_ANGLE)
 	save_io_visibilitygrid_to_GRASS(visgrid, viewOptions.outputfname,
-					FCELL_TYPE, angleVisibilityOutput);
+					FCELL_TYPE, angleVisibilityOutput,
+					OUTPUT_ANGLE);
     else
 	/* elevation  output */
 	save_io_vis_and_elev_to_GRASS(visgrid, viewOptions.inputfname,