123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- /*
- ************************************************************
- * MODULE: r.le.pixel/input.c *
- * Version 5.0 Nov. 1, 2001 *
- * *
- * AUTHOR: W.L. Baker, University of Wyoming *
- * BAKERWL@UWYO.EDU *
- * *
- * PURPOSE: To analyze pixel-scale landscape properties *
- * input.c uses the GRASS parser to get user input *
- * *
- * COPYRIGHT: (C) 2001 by W.L. Baker *
- * *
- * This program is free software under the GNU General *
- * Public License(>=v2). Read the file COPYING that comes *
- * with GRASS for details *
- * *
- ************************************************************/
- #include <stdlib.h>
- #include <grass/config.h>
- #include "pixel.h"
- extern struct CHOICE *choice;
- void user_input(int argc, char **argv)
- {
- int i;
- /* setup the GRASS parsing routine
- structures to be used to read
- in the user's parameter choices */
- struct Flag *units;
- struct Flag *zscore;
- struct Flag *edgemap;
- struct Option *name;
- struct Option *sampling_method;
- struct Option *region;
- struct Option *att;
- struct Option *diversity;
- struct Option *measure_code;
- struct Option *method_code;
- struct Option *juxtaposition;
- struct Option *edge;
- /* use the GRASS parsing routines to read in the user's parameter choices */
- edgemap = G_define_flag();
- edgemap->key = 'e';
- edgemap->description =
- "Output map 'edge' of edges given a '1' in r.le.para/edge file";
- units = G_define_flag();
- units->key = 'u';
- units->description =
- "Output maps 'units_x' with sampling units for each scale x ";
- zscore = G_define_flag();
- zscore->key = 'z';
- zscore->description = "Output map 'zscores' with standardized scores";
- name = G_define_option();
- name->key = "map";
- name->description = "Raster map to be analyzed";
- name->type = TYPE_STRING;
- name->gisprompt = "old,cell,raster";
- name->required = YES;
- sampling_method = G_define_option();
- sampling_method->answer = "w";
- sampling_method->key = "sam";
- sampling_method->description = "Sampling method (choose only 1 method):\n"
- "\tw = whole map u = units m = moving window r = regions";
- sampling_method->type = TYPE_STRING;
- sampling_method->multiple = NO;
- sampling_method->required = NO;
- region = G_define_option();
- region->key = "reg";
- region->description =
- "Name of regions map, only when sam = r; omit otherwise";
- region->type = TYPE_STRING;
- region->gisprompt = "old,cell,raster";
- region->required = NO;
- att = G_define_option();
- att->key = "att";
- att->description =
- "b1 = mn. pixel att. b2 = s.d. pixel att.\n"
- "\tb3 = min. pixel att. b4 = max. pixel att.";
- att->options = "b1,b2,b3,b4";
- att->type = TYPE_STRING;
- att->multiple = YES;
- att->required = NO;
- diversity = G_define_option();
- diversity->key = "div";
- diversity->description =
- "d1 = richness d2 = Shannon d3 = dominance d4 = inv. Simpson";
- diversity->options = "d1,d2,d3,d4";
- diversity->type = TYPE_STRING;
- diversity->multiple = YES;
- diversity->required = NO;
- method_code = G_define_option();
- method_code->key = "te1";
- method_code->description = "Texture method (choose only 1 method):\n"
- "\tm1 = 2N-H m2 = 2N-45 m3 = 2N-V m4 = 2N-135\n"
- "\tm5 = 4N-HV m6 = 4N-DIAG m7 = 8N";
- method_code->options = "m1,m2,m3,m4,m5,m6,m7";
- method_code->type = TYPE_STRING;
- method_code->multiple = NO;
- method_code->required = NO;
- measure_code = G_define_option();
- measure_code->key = "te2";
- measure_code->description =
- "Texture measures (required if te1 was specified):\n"
- "\tt1 = contagion t2 = ang. sec. mom. t3 = inv. diff. mom.\n"
- "\tt4 = entropy t5 = contrast";
- measure_code->options = "t1,t2,t3,t4,t5";
- measure_code->type = TYPE_STRING;
- measure_code->multiple = YES;
- measure_code->required = NO;
- juxtaposition = G_define_option();
- juxtaposition->key = "jux";
- juxtaposition->description =
- "Juxtaposition measures (weight file in r.le.para needed):\n"
- "\tj1 = mn. juxtaposition j2 = s.d. juxtaposition";
- juxtaposition->options = "j1,j2";
- juxtaposition->type = TYPE_STRING;
- juxtaposition->multiple = YES;
- juxtaposition->required = NO;
- edge = G_define_option();
- edge->key = "edg";
- edge->description =
- "e1 = sum of edges e2 = sum of edges by type (need edge file: r.le.para)";
- edge->options = "e1,e2";
- edge->type = TYPE_STRING;
- edge->multiple = YES;
- edge->required = NO;
- if (G_parser(argc, argv))
- exit(EXIT_FAILURE);
- /* record the user inputs for map,
- sam, run, and out parameters */
- strcpy(choice->fn, name->answer);
- choice->wrum = sampling_method->answer[0];
- /* check for unacceptable values for
- input parameters */
- if (strcmp(sampling_method->answer, "w") &&
- strcmp(sampling_method->answer, "u") &&
- strcmp(sampling_method->answer, "m") &&
- strcmp(sampling_method->answer, "r")) {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ***************************************************\n");
- fprintf(stdout,
- " You input an unacceptable value for parameter sam \n");
- fprintf(stdout,
- " ***************************************************\n");
- exit(EXIT_FAILURE);
- }
- /* check for multiple values for te1 */
- if (method_code->answer)
- if (method_code->answers[1]) {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " **********************************************\n");
- fprintf(stdout,
- " You input multiple values for parameter te1, \n");
- fprintf(stdout,
- " but only one is allowed \n");
- fprintf(stdout,
- " **********************************************\n");
- exit(EXIT_FAILURE);
- }
- /* if the -u flag is specified, then
- set the choice->units flag to 1 */
- choice->units = 0;
- if (!strcmp(sampling_method->answer, "u") && units->answer)
- choice->units = 1;
- else if (strcmp(sampling_method->answer, "u") && units->answer) {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ***************************************************\n");
- fprintf(stdout,
- " You requested output of map 'units' with sampling \n");
- fprintf(stdout,
- " units, by using flag -u, but this option is only \n");
- fprintf(stdout,
- " available when sam=u \n");
- fprintf(stdout,
- " ***************************************************\n");
- exit(EXIT_FAILURE);
- }
- /* if sampling_method is by REGION
- get region file name. Check to see
- that the name was input */
- if (!strcmp(sampling_method->answer, "r")) {
- if (region->answer)
- strcpy(choice->reg, region->answer);
- else {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ***********************************************\n");
- fprintf(stdout,
- " You requested sampling by region, but did not \n");
- fprintf(stdout,
- " input the name of the region using the reg= \n");
- fprintf(stdout,
- " parameter \n");
- fprintf(stdout,
- " ***********************************************\n");
- exit(EXIT_FAILURE);
- }
- }
- if (region->answer)
- if (strcmp(sampling_method->answer, "r")) {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ***********************************************\n");
- fprintf(stdout,
- " You requested sampling by region, by using \n");
- fprintf(stdout,
- " the reg= parameter, but did not input the \n");
- fprintf(stdout,
- " sam=r parameter \n");
- fprintf(stdout,
- " ***********************************************\n");
- exit(EXIT_FAILURE);
- }
- /* initialize flag arrays in choice
- data structure. */
- for (i = 0; i < 5; i++)
- choice->att[i] = 0;
- for (i = 0; i < 5; i++)
- choice->div[i] = 0;
- for (i = 0; i < 6; i++)
- choice->te2[i] = 0;
- for (i = 0; i < 3; i++)
- choice->jux[i] = 0;
- for (i = 0; i < 3; i++)
- choice->edg[i] = 0;
- /* fill measure_code and method
- code arrays */
- if (att->answer) {
- choice->att[0] = 1;
- for (i = 0; att->answers[i] != NULL; i++) {
- if (!strcmp(att->answers[i], "b1"))
- choice->att[1] = 1;
- else if (!strcmp(att->answers[i], "b2"))
- choice->att[2] = 1;
- else if (!strcmp(att->answers[i], "b3"))
- choice->att[3] = 1;
- else if (!strcmp(att->answers[i], "b4"))
- choice->att[4] = 1;
- }
- }
- if (edgemap->answer && choice->wrum == 'w') {
- choice->edgemap = edgemap->answer;
- choice->edg[0] = 1;
- choice->edg[2] = 1;
- }
- else if (edgemap->answer && choice->wrum != 'w') {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ****************************************************\n");
- fprintf(stdout,
- " An edge map (flag is -e) is not available unless \n");
- fprintf(stdout,
- " sam=w \n");
- fprintf(stdout,
- " ****************************************************\n");
- exit(EXIT_FAILURE);
- }
- if (zscore->answer && choice->wrum == 'w') {
- choice->z = zscore->answer;
- choice->att[0] = 1;
- choice->att[1] = 1;
- choice->att[2] = 1;
- }
- else if (zscore->answer && choice->wrum != 'w') {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ****************************************************\n");
- fprintf(stdout,
- " A zscores map (flag is -z) is not available unless \n");
- fprintf(stdout,
- " sam=w \n");
- fprintf(stdout,
- " ****************************************************\n");
- exit(EXIT_FAILURE);
- }
- if (diversity->answer) {
- choice->div[0] = 1;
- for (i = 0; diversity->answers[i] != NULL; i++) {
- if (!strcmp(diversity->answers[i], "d1"))
- choice->div[1] = 1;
- else if (!strcmp(diversity->answers[i], "d2"))
- choice->div[2] = 1;
- else if (!strcmp(diversity->answers[i], "d3"))
- choice->div[3] = 1;
- else if (!strcmp(diversity->answers[i], "d4"))
- choice->div[4] = 1;
- }
- }
- choice->tex = 0;
- if (measure_code->answer || method_code->answer) {
- if (measure_code->answer && method_code->answer) {
- choice->te2[0] = 1;
- for (i = 0; measure_code->answers[i] != NULL; i++) {
- if (!strcmp(measure_code->answers[i], "t1"))
- choice->te2[1] = 1;
- else if (!strcmp(measure_code->answers[i], "t2"))
- choice->te2[2] = 1;
- else if (!strcmp(measure_code->answers[i], "t3"))
- choice->te2[3] = 1;
- else if (!strcmp(measure_code->answers[i], "t4"))
- choice->te2[4] = 1;
- else if (!strcmp(measure_code->answers[i], "t5"))
- choice->te2[5] = 1;
- }
- if (!strcmp(method_code->answer, "m1"))
- choice->tex = 1;
- else if (!strcmp(method_code->answer, "m2"))
- choice->tex = 2;
- else if (!strcmp(method_code->answer, "m3"))
- choice->tex = 3;
- else if (!strcmp(method_code->answer, "m4"))
- choice->tex = 4;
- else if (!strcmp(method_code->answer, "m5"))
- choice->tex = 5;
- else if (!strcmp(method_code->answer, "m6"))
- choice->tex = 6;
- else if (!strcmp(method_code->answer, "m7"))
- choice->tex = 7;
- }
- else {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " ************************************************\n");
- fprintf(stdout,
- " You requested texture measurement, but did not \n");
- fprintf(stdout,
- " input both parameter te1 and te2 \n");
- fprintf(stdout,
- " ************************************************\n");
- exit(EXIT_FAILURE);
- }
- }
- if (juxtaposition->answer) {
- choice->jux[0] = 1;
- for (i = 0; juxtaposition->answers[i] != NULL; i++) {
- if (!strcmp(juxtaposition->answers[i], "j1"))
- choice->jux[1] = 1;
- else if (!strcmp(juxtaposition->answers[i], "j2"))
- choice->jux[2] = 1;
- }
- }
- if (edge->answer) {
- choice->edg[0] = 1;
- for (i = 0; edge->answers[i] != NULL; i++) {
- if (!strcmp(edge->answers[i], "e1"))
- choice->edg[1] = 1;
- else if (!strcmp(edge->answers[i], "e2"))
- choice->edg[2] = 1;
- }
- }
- if (!att->answer && !diversity->answer && !measure_code->answer &&
- !juxtaposition->answer && !edge->answer && !zscore->answer &&
- !edgemap->answer) {
- fprintf(stdout, "\n");
- fprintf(stdout,
- " **************************************************\n");
- fprintf(stdout,
- " You did not select any measures to be calculated \n");
- fprintf(stdout,
- " **************************************************\n");
- exit(EXIT_FAILURE);
- }
- return;
- }
|