#include #include #include "global.h" int raw_stats (int fd[], int verbose, int with_coordinates, int with_xy, int with_labels) { CELL null_cell; void **rast, **rastp; char str1[50]; register int i; int row, col, nulls_found; double G_row_to_northing(), G_col_to_easting(); struct Cell_head window; char nbuf[100], ebuf[100]; RASTER_MAP_TYPE *map_type; /* allocate i/o buffers for each cell file */ rast = (void **) G_calloc (nfiles, sizeof (void *)); rastp = (void **) G_calloc (nfiles, sizeof (void *)); map_type = (RASTER_MAP_TYPE *) G_calloc (nfiles, sizeof( RASTER_MAP_TYPE)); for (i = 0; i < nfiles; i++) { /* if fp map and report real data, not cat indexes, set type to DCELL */ if(is_fp[i] && !raw && !as_int) map_type[i] = DCELL_TYPE; else map_type[i] = CELL_TYPE; rast[i] = G_allocate_raster_buf(map_type[i]); } /* get window */ if (with_coordinates) G_get_set_window (&window); /* here we go */ if (verbose) fprintf (stderr, "%s: ", G_program_name()); G_set_c_null_value(&null_cell, 1); for (row = 0; row < nrows; row++) { if (verbose) G_percent (row, nrows, 2); /* read the rows and set the pointers */ for (i = 0; i < nfiles; i++) { if(G_get_raster_row(fd[i], rast[i], row, map_type[i]) < 0) exit(1); rastp[i] = rast[i]; } if (with_coordinates) G_format_northing (G_row_to_northing(row+.5, &window), nbuf, -1); for (col = 0; col < ncols; col++) { if (no_nulls || no_nulls_all) { nulls_found = 0; for (i = 0; i < nfiles; i++) { /* G_set_raster_value_d(zero_val, 0.0, map_type[i]); if (G_raster_cmp(rastp[i], zero_val, map_type[i]) != 0) break; */ if(G_is_null_value(rastp[i], map_type[i])) nulls_found++; } if ((nulls_found == nfiles) || (nulls_found && no_nulls)) { for (i = 0; i < nfiles; i++) rastp[i] = G_incr_void_ptr(rastp[i], G_raster_size(map_type[i])); continue; } } if (with_coordinates) { G_format_easting (G_col_to_easting(col+.5, &window), ebuf, -1); fprintf (stdout,"%s%s%s%s", ebuf,fs,nbuf,fs); } if (with_xy) fprintf (stdout,"%d%s%d%s", col+1,fs,row+1,fs); for (i = 0; i < nfiles; i++) { if (G_is_null_value(rastp[i], map_type[i])) { fprintf (stdout,"%s%s", i?fs:"", no_data_str); if (with_labels) fprintf (stdout,"%s%s", fs, G_get_cat (null_cell, &labels[i])); } else if(map_type[i] == CELL_TYPE) { fprintf (stdout,"%s%ld", i?fs:"", (long) *((CELL *) rastp[i])); if (with_labels && !is_fp[i]) fprintf (stdout,"%s%s", fs, G_get_cat (*((CELL *) rastp[i]), &labels[i])); } else /* floating point cell */ { sprintf(str1, "%.10f", *((DCELL *) rastp[i])); G_trim_decimal(str1); G_strip(str1); fprintf (stdout,"%s%s", i?fs:"", str1); if (with_labels) fprintf (stdout,"%s%s", fs, G_get_d_raster_cat((DCELL *) rastp[i], &labels[i])); } rastp[i] = G_incr_void_ptr(rastp[i], G_raster_size(map_type[i])); } fprintf (stdout,"\n"); } } if (verbose) G_percent (row, nrows, 2); return 0; }