[GRASS-SVN] r46126 - grass/trunk/imagery/i.atcorr
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Apr 28 08:10:02 EDT 2011
Author: mmetz
Date: 2011-04-28 05:10:02 -0700 (Thu, 28 Apr 2011)
New Revision: 46126
Modified:
grass/trunk/imagery/i.atcorr/main.cpp
Log:
always use the cache when needed, default output as FCELL
Modified: grass/trunk/imagery/i.atcorr/main.cpp
===================================================================
--- grass/trunk/imagery/i.atcorr/main.cpp 2011-04-28 11:34:10 UTC (rev 46125)
+++ grass/trunk/imagery/i.atcorr/main.cpp 2011-04-28 12:10:02 UTC (rev 46126)
@@ -56,6 +56,9 @@
/* TICache: create 1 km bins for visibility */
#define BIN_VIS 1.
+/* uncomment to disable cache usage */
+/* #define _NO_OPTIMIZE_ */
+
/* Input options and flags */
struct Options
{
@@ -71,11 +74,10 @@
struct Option *oscl; /* scale the output data (reflectance values) to this range */
/* flags */
- struct Flag *oflt; /* output data as floating point and do not round */
+ struct Flag *oint; /* output data as integer */
struct Flag *irad; /* treat input values as reflectance instead of radiance values */
struct Flag *etmafter; /* treat input data as a satelite image of type etm+ taken after July 1, 2000 */
struct Flag *etmbefore; /* treat input data as a satelite image of type etm+ taken before July 1, 2000 */
- struct Flag *optimize;
};
struct ScaleRange
@@ -96,7 +98,7 @@
static CELL round_c(FCELL);
static void write_fp_to_cell(int, FCELL *);
static void process_raster(int, InputMask, ScaleRange, int, int, int, bool,
- ScaleRange, bool);
+ ScaleRange);
static void copy_colors(const char *, char *);
static void define_module(void);
static struct Options define_options(void);
@@ -240,8 +242,8 @@
oscale: output file's range (default is min = 0, max = 255)
*/
static void process_raster(int ifd, InputMask imask, ScaleRange iscale,
- int ialt_fd, int ivis_fd, int ofd, bool oflt,
- ScaleRange oscale, bool optimize)
+ int ialt_fd, int ivis_fd, int ofd, bool oint,
+ ScaleRange oscale)
{
FCELL *buf; /* buffer for the input values */
FCELL *alt = NULL; /* buffer for the elevation values */
@@ -249,6 +251,11 @@
FCELL prev_alt = -1.f;
FCELL prev_vis = -1.f;
int row, col, nrows, ncols;
+ bool optimize = (ialt_fd >= 0 || ivis_fd >= 0);
+
+#ifdef _NO_OPTIMZE_
+ optimize = false;
+#endif
/* do initial computation with global elevation and visibility values */
TransformInput ti;
@@ -381,15 +388,15 @@
buf[col] * ((float)oscale.max - (float)oscale.min) +
oscale.min;
- if (~oflt && (buf[col] > (float)oscale.max))
+ if (oint && (buf[col] > (float)oscale.max))
G_warning(_("The output data will overflow. Reflectance > 100%%"));
}
/* write output */
- if (oflt)
- Rast_put_row(ofd, buf, FCELL_TYPE);
- else
+ if (oint)
write_fp_to_cell(ofd, buf);
+ else
+ Rast_put_row(ofd, buf, FCELL_TYPE);
}
G_percent(1, 1, 1);
@@ -488,10 +495,10 @@
opts.oscl->description = _("Rescale output raster map");
opts.oscl->guisection = _("Output");
- opts.oflt = G_define_flag();
- opts.oflt->key = 'f';
- opts.oflt->description = _("Output raster map as floating point");
- opts.oflt->guisection = _("Output");
+ opts.oint = G_define_flag();
+ opts.oint->key = 'i';
+ opts.oint->description = _("Output raster map as integer");
+ opts.oint->guisection = _("Output");
opts.irad = G_define_flag();
opts.irad->key = 'r';
@@ -511,11 +518,6 @@
_("Input from ETM+ image taken before July 1, 2000");
opts.etmbefore->guisection = _("Input");
- opts.optimize = G_define_flag();
- opts.optimize->key = 'o';
- opts.optimize->description =
- _("Try to increase computation speed when altitude and/or visibility map is used");
-
return opts;
}
@@ -592,13 +594,13 @@
}
/* open a floating point raster or not? */
- if (opts.oflt->answer) {
- if ((oimg_fd = Rast_open_fp_new(opts.oimg->answer)) < 0)
+ if (opts.oint->answer) {
+ if ((oimg_fd = Rast_open_new(opts.oimg->answer, CELL_TYPE)) < 0)
G_fatal_error(_("Unable to create raster map <%s>"),
opts.oimg->answer);
}
else {
- if ((oimg_fd = Rast_open_new(opts.oimg->answer, CELL_TYPE)) < 0)
+ if ((oimg_fd = Rast_open_fp_new(opts.oimg->answer)) < 0)
G_fatal_error(_("Unable to create raster map <%s>"),
opts.oimg->answer);
}
@@ -620,17 +622,12 @@
if (opts.etmafter->answer)
imask = (InputMask) (imask | ETM_AFTER);
- if ((ialt_fd >= 0 || ivis_fd >= 0) && !opts.optimize->answer) {
- G_message(_("An elevation and/or visibility map is given, but the optimization flag is not set."));
- G_message(_("This can take some time."));
- }
-
/* switch on optimization automatically if elevation and/or visibility map is given? */
/* process the input raster and produce our atmospheric corrected output raster. */
G_message(_("Atmospheric correction..."));
process_raster(iimg_fd, imask, iscale, ialt_fd, ivis_fd,
- oimg_fd, opts.oflt->answer, oscale, opts.optimize->answer);
+ oimg_fd, opts.oint->answer, oscale);
/* Close the input and output file descriptors */
More information about the grass-commit
mailing list