3
3
#include <grass/gis.h>
4
#include <grass/raster.h>
4
5
#include <grass/glocale.h>
7
#define STATS "r.stats"
8
#define RECLASS "r.reclass"
10
8
/* function prototypes */
11
9
static void sum_out(FILE *, long, double);
15
o_sum(char *basemap, char *covermap, char *outputmap, int usecats,
16
struct Categories *cats)
11
int o_sum(const char *basemap, const char *covermap, const char *outputmap,
12
int usecats, struct Categories *cats)
21
14
long catb, basecat, covercat;
22
15
double x, area, sum1;
24
char *tempfile1, *tempfile2;
27
tempfile1 = G_tempfile();
28
tempfile2 = G_tempfile();
30
sprintf(command, "%s -cn input=\"%s,%s\" fs=space output=\"%s\"", STATS, basemap,
33
if (stat = G_system(command)) {
35
G_fatal_error(_("%s: running %s command"), me, STATS);
38
fd1 = fopen(tempfile1, "r");
39
fd2 = fopen(tempfile2, "w");
40
if (fd1 == NULL || fd2 == NULL) {
43
G_fatal_error(_("%s: unable to open temporary file"), me);
45
sum_out(fd2, 0L, 0.0); /* force at least one reclass rule */
17
struct Popen stats_child, reclass_child;
18
FILE *stats, *reclass;
20
stats = run_stats(&stats_child, basemap, covermap, "-cn");
21
reclass = run_reclass(&reclass_child, basemap, outputmap);
23
sum_out(reclass, 0L, 0.0); /* force at least one reclass rule */
51
while (fscanf(fd1, "%ld %ld %lf", &basecat, &covercat, &area) == 3) {
28
while (fscanf(stats, "%ld %ld %lf", &basecat, &covercat, &area) == 3) {
52
29
if (catb != basecat) {
53
sum_out(fd2, catb, sum1);
30
sum_out(reclass, catb, sum1);
58
sscanf(G_get_cat((CELL) covercat, cats), "%lf", &x);
35
sscanf(Rast_get_c_cat((CELL *) &covercat, cats), "%lf", &x);
62
39
/* fprintf(stderr,"sum: %d\n",(int)sum1); */
65
sum_out(fd2, basecat, sum1);
68
sprintf(command, "%s input=\"%s\" output=\"%s\" rules=\"%s\"",
69
RECLASS, basemap, outputmap, tempfile2);
70
stat = G_system(command);
42
sum_out(reclass, basecat, sum1);
44
G_popen_close(&stats_child);
45
G_popen_close(&reclass_child);
78
static void sum_out(FILE * fd, long cat, double sum1)
50
static void sum_out(FILE *fp, long cat, double sum1)