123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #include <grass/dbmi.h>
- #include <grass/glocale.h>
- #include "global.h"
- int report(void)
- {
- int i;
- char left[20], right[20];
- if (!options.print && !(options.option == O_COUNT ||
- options.option == O_LENGTH ||
- options.option == O_AREA)) {
- G_warning(_("No totals for selected option"));
- return 0;
- }
-
- switch (options.option) {
- case O_CAT:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat\n");
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d\n", Values[i].cat);
- break;
- case O_COUNT:
- if (options.print) {
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%scount\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%d\n", Values[i].cat, options.fs, Values[i].count1);
- }
- if (options.total) {
- int sum = 0;
- for (i = 0; i < vstat.rcat; i++) {
- sum += Values[i].count1;
- }
- fprintf(stdout, "total count%s%d\n", options.fs, sum);
- }
- break;
- case O_AREA:
- if (options.print) {
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%sarea\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- }
- if (options.total) {
- double sum = 0.0;
- for (i = 0; i < vstat.rcat; i++) {
- sum += Values[i].d1;
- }
- fprintf(stdout, "total area%s%.15g\n", options.fs, sum);
- }
- break;
- case O_COMPACT:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%scompact\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- break;
- case O_PERIMETER:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%sperimeter\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- break;
- case O_LENGTH:
- if (options.print) {
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%slength\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- }
- if (options.total) {
- double sum = 0.0;
-
- for (i = 0; i < vstat.rcat; i++) {
- sum += Values[i].d1;
- }
- fprintf(stdout, "total length%s%.15g\n", options.fs, sum);
- }
- break;
- case O_SLOPE:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%sslope\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- break;
- case O_SINUOUS:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%ssinuous\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- break;
- case O_COOR:
- case O_START:
- case O_END:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%sx%sy%sz\n", options.fs, options.fs, options.fs);
- for (i = 0; i < vstat.rcat; i++) {
- if (Values[i].count1 == 1)
- fprintf(stdout, "%d%s%.15g%s%.15g%s%.15g\n", Values[i].cat, options.fs,
- Values[i].d1, options.fs, Values[i].d2, options.fs, Values[i].d3);
- }
- break;
- case O_SIDES:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%sleft%sright\n", options.fs, options.fs);
- for (i = 0; i < vstat.rcat; i++) {
- if (Values[i].count1 == 1) {
- if (Values[i].i1 >= 0)
- sprintf(left, "%d", Values[i].i1);
- else
- sprintf(left, "-1"); /* NULL, no area/cat */
- }
- else if (Values[i].count1 > 1) {
- sprintf(left, "-");
- }
- else { /* Values[i].count1 == 0 */
- /* It can be OK if the category is assigned to an element
- type which is not GV_BOUNDARY */
- /* -> TODO: print only if there is boundary with that cat */
- sprintf(left, "-");
- }
- if (Values[i].count2 == 1) {
- if (Values[i].i2 >= 0)
- sprintf(right, "%d", Values[i].i2);
- else
- sprintf(right, "-1"); /* NULL, no area/cat */
- }
- else if (Values[i].count2 > 1) {
- sprintf(right, "-");
- }
- else { /* Values[i].count1 == 0 */
- sprintf(right, "-");
- }
- fprintf(stdout, "%d%s%s%s%s\n", Values[i].cat, options.fs, left, options.fs, right);
- }
- break;
- case O_QUERY:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%squery\n", options.fs);
- for (i = 0; i < vstat.rcat; i++) {
- if (Values[i].null) {
- fprintf(stdout, "%d|-\n", Values[i].cat);
- }
- else {
- switch (vstat.qtype) {
- case (DB_C_TYPE_INT):
- fprintf(stdout, "%d%s%d\n", Values[i].cat, options.fs, Values[i].i1);
- break;
- case (DB_C_TYPE_DOUBLE):
- fprintf(stdout, "%d%s%15g\n", Values[i].cat, options.fs, Values[i].d1);
- break;
- case (DB_C_TYPE_STRING):
- fprintf(stdout, "%d%s%s\n", Values[i].cat, options.fs, Values[i].str1);
- break;
- }
- }
- }
- break;
- case O_AZIMUTH:
- if (G_verbose() > G_verbose_min())
- fprintf(stdout, "cat%sazimuth\n", options.fs);
- for (i = 0; i < vstat.rcat; i++)
- fprintf(stdout, "%d%s%.15g\n", Values[i].cat, options.fs, Values[i].d1);
- break;
- }
- return 0;
- }
- int print_stat(void)
- {
- if (vstat.rcat > 0) {
- int rcat_report;
- if(find_cat(-1, 0) != -1)
- rcat_report = vstat.rcat - 1;
- else
- rcat_report = vstat.rcat;
-
- G_message(_("%d categories read from vector map (layer %d)"),
- rcat_report, options.field); /* don't report cat -1 */
- }
- if (vstat.select > 0)
- G_message(_("%d records selected from table (layer %d)"),
- vstat.select, options.qfield);
- if (vstat.exist > 0)
- G_message(_("%d categories read from vector map exist in selection from table"),
- vstat.exist);
- if (vstat.notexist > 0)
- G_message(_("%d categories read from vector map don't exist in selection from table"),
- vstat.notexist);
- G_message(_("%d records updated/inserted (layer %d)"),
- vstat.update, options.field);
- if (vstat.error > 0)
- G_message(_("%d update/insert errors (layer %d)"),
- vstat.error, options.field);
- if (vstat.dupl > 0)
- G_message(_("%d categories with more points (coordinates not loaded)"),
- vstat.dupl);
- return 0;
- }
|