parse.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /****************************************************************************
  2. *
  3. * MODULE: r.distance
  4. *
  5. * AUTHOR(S): Michael Shapiro - CERL
  6. * Sort/reverse sort by distance by Huidae Cho
  7. *
  8. * PURPOSE: Locates the closest points between objects in two
  9. * raster maps.
  10. *
  11. * COPYRIGHT: (C) 2003-2014 by the GRASS Development Team
  12. *
  13. * This program is free software under the GNU General
  14. * Public License (>=v2). Read the file COPYING that
  15. * comes with GRASS for details.
  16. *
  17. ***************************************************************************/
  18. #include <stdlib.h>
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include "defs.h"
  22. #include <grass/gis.h>
  23. #include <grass/glocale.h>
  24. void parse(int argc, char *argv[], struct Parms *parms)
  25. {
  26. struct Option *maps, *fs, *sort;
  27. struct Flag *labels, *overlap, *null;
  28. const char *name, *mapset;
  29. maps = G_define_standard_option(G_OPT_R_MAPS);
  30. maps->key_desc = "name1,name2";
  31. maps->description = _("Name of two input raster maps for computing inter-class distances");
  32. fs = G_define_standard_option(G_OPT_F_SEP);
  33. fs->answer = ":"; /* colon is default output fs */
  34. sort = G_define_option();
  35. sort->key = "sort";
  36. sort->type = TYPE_STRING;
  37. sort->required = NO;
  38. sort->multiple = NO;
  39. sort->label = _("Sort output by distance");
  40. sort->description = _("Default: sorted by categories");
  41. sort->options = "asc,desc";
  42. G_asprintf((char **)&(sort->descriptions),
  43. "asc;%s;desc;%s",
  44. _("Sort by distance in ascending order"),
  45. _("Sort by distance in descending order"));
  46. labels = G_define_flag();
  47. labels->key = 'l';
  48. labels->description = _("Include category labels in the output");
  49. overlap = G_define_flag();
  50. overlap->key = 'o';
  51. overlap->description =
  52. _("Report zero distance if rasters are overlapping");
  53. null = G_define_flag();
  54. null->key = 'n';
  55. null->description = _("Report null objects as *");
  56. if (G_parser(argc, argv))
  57. exit(EXIT_FAILURE);
  58. name = parms->map1.name = maps->answers[0];
  59. mapset = parms->map1.mapset = G_find_raster2(name, "");
  60. if (mapset == NULL)
  61. G_fatal_error(_("Raster map <%s> not found"), name);
  62. if (Rast_map_type(name, mapset) != CELL_TYPE)
  63. G_fatal_error(_("Raster map <%s> is not CELL"), name);
  64. parms->map1.fullname = G_fully_qualified_name(name, mapset);
  65. name = parms->map2.name = maps->answers[1];
  66. mapset = parms->map2.mapset = G_find_raster2(name, "");
  67. if (mapset == NULL)
  68. G_fatal_error(_("Raster map <%s> not found"), name);
  69. if (Rast_map_type(name, mapset) != CELL_TYPE)
  70. G_fatal_error(_("Raster map <%s> is not CELL"), name);
  71. parms->map2.fullname = G_fully_qualified_name(name, mapset);
  72. parms->labels = labels->answer ? 1 : 0;
  73. parms->fs = G_option_to_separator(fs);
  74. parms->overlap = overlap->answer ? 1 : 0;
  75. parms->null = null->answer ? 1 : 0;
  76. if (sort->answer)
  77. parms->sort = strcmp(sort->answer, "asc") == 0 ? 1 : 2;
  78. else
  79. parms->sort = 0;
  80. }