|
@@ -1,24 +1,11 @@
|
|
|
|
|
|
-/*-
|
|
|
- * s.perturb
|
|
|
- * Copyright (C) 1994. James Darrell McCauley.
|
|
|
+/****************************************************************************
|
|
|
*
|
|
|
- * Author: James Darrell McCauley darrell@mccauley-usa.com
|
|
|
- * http://mccauley-usa.com/
|
|
|
- *
|
|
|
- * This program is free software; you can redistribute it and/or
|
|
|
- * modify it under the terms of the GNU General Public License
|
|
|
- * as published by the Free Software Foundation; either version 2
|
|
|
- * of the License, or (at your option) any later version.
|
|
|
- *
|
|
|
- * This program is distributed in the hope that it will be useful,
|
|
|
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
- * GNU General Public License for more details.
|
|
|
- *
|
|
|
- * You should have received a copy of the GNU General Public License
|
|
|
- * along with this program; if not, write to the Free Software
|
|
|
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
+ * MODULE: v.pertrub
|
|
|
+ * AUTHOR(S): James Darrell McCauley darrell@mccauley-usa.com
|
|
|
+ * http://mccauley-usa.com/
|
|
|
+ * PURPOSE:
|
|
|
+ * COPYRIGHT: (C) 1994-2009 by James Darrell McCauley and the GRASS Development Team
|
|
|
*
|
|
|
* Modification History:
|
|
|
* 3/2006 added min and seed MN/SM ITC-irst
|
|
@@ -28,15 +15,20 @@
|
|
|
* 0.3B <25 Feb 1995> cleaned up 'gcc -Wall' warnings (jdm)
|
|
|
* <13 Sept 2000> released under GPL
|
|
|
*
|
|
|
- * TODO: see code below
|
|
|
- */
|
|
|
+ * 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 <math.h>
|
|
|
+
|
|
|
#include <grass/gis.h>
|
|
|
#include <grass/dbmi.h>
|
|
|
#include <grass/vector.h>
|
|
|
#include <grass/glocale.h>
|
|
|
+
|
|
|
#include "perturb.h"
|
|
|
#include "zufall.h"
|
|
|
|
|
@@ -44,8 +36,8 @@ int main(int argc, char **argv)
|
|
|
{
|
|
|
double p1, p2, numbers[1000], numbers2[1000];
|
|
|
int (*rng) ();
|
|
|
- int i, verbose;
|
|
|
- int line, nlines, ttype, n, ret, seed;
|
|
|
+ int i;
|
|
|
+ int line, nlines, ttype, n, ret, seed, field;
|
|
|
struct field_info *Fi, *Fin;
|
|
|
double min = 0.;
|
|
|
int debuglevel = 3;
|
|
@@ -59,23 +51,22 @@ int main(int argc, char **argv)
|
|
|
struct GModule *module;
|
|
|
struct
|
|
|
{
|
|
|
- struct Option *in, *out, *dist, *pars, *min, *seed;
|
|
|
+ struct Option *in, *out, *dist, *pars, *min, *seed, *field;
|
|
|
} parm;
|
|
|
- struct
|
|
|
- {
|
|
|
- struct Flag *q;
|
|
|
- } flag;
|
|
|
|
|
|
G_gisinit(argv[0]);
|
|
|
|
|
|
module = G_define_module();
|
|
|
G_add_keyword(_("vector"));
|
|
|
+ G_add_keyword(_("statistics"));
|
|
|
+
|
|
|
module->description =
|
|
|
- _("Random location perturbations of GRASS vector points");
|
|
|
+ _("Random location perturbations of vector points.");
|
|
|
|
|
|
parm.in = G_define_standard_option(G_OPT_V_INPUT);
|
|
|
- parm.in->description = _("Vector points to be spatially perturbed");
|
|
|
|
|
|
+ parm.field = G_define_standard_option(G_OPT_V_FIELD_ALL);
|
|
|
+
|
|
|
parm.out = G_define_standard_option(G_OPT_V_OUTPUT);
|
|
|
|
|
|
parm.dist = G_define_option();
|
|
@@ -91,11 +82,11 @@ int main(int argc, char **argv)
|
|
|
parm.pars->type = TYPE_DOUBLE;
|
|
|
parm.pars->required = YES;
|
|
|
parm.pars->multiple = YES;
|
|
|
- parm.pars->description =
|
|
|
- _("Parameter(s) of distribution. If the distribution "
|
|
|
- "is uniform, only one parameter, the maximum, is needed. "
|
|
|
- "For a normal distribution, two parameters, the mean and "
|
|
|
- "standard deviation, are required.");
|
|
|
+ parm.pars->label = _("Parameter(s) of distribution");
|
|
|
+ parm.pars->description = _("If the distribution "
|
|
|
+ "is uniform, only one parameter, the maximum, is needed. "
|
|
|
+ "For a normal distribution, two parameters, the mean and "
|
|
|
+ "standard deviation, are required.");
|
|
|
|
|
|
parm.min = G_define_option();
|
|
|
parm.min->key = "minimum";
|
|
@@ -110,15 +101,10 @@ int main(int argc, char **argv)
|
|
|
parm.seed->required = NO;
|
|
|
parm.seed->answer = "0";
|
|
|
parm.seed->description = _("Seed for random number generation");
|
|
|
-
|
|
|
- flag.q = G_define_flag();
|
|
|
- flag.q->key = 'q';
|
|
|
- flag.q->description = _("Quiet");
|
|
|
-
|
|
|
+
|
|
|
if (G_parser(argc, argv))
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
|
- verbose = (!flag.q->answer);
|
|
|
min = atof(parm.min->answer);
|
|
|
seed = atoi(parm.seed->answer);
|
|
|
|
|
@@ -150,10 +136,12 @@ int main(int argc, char **argv)
|
|
|
|
|
|
/* Open input */
|
|
|
Vect_set_open_level(2);
|
|
|
- Vect_open_old(&In, parm.in->answer, "");
|
|
|
-
|
|
|
+ Vect_open_old2(&In, parm.in->answer, "", parm.field->answer);
|
|
|
+
|
|
|
+ field = Vect_get_field_number(&In, parm.field->answer);
|
|
|
+
|
|
|
/* Open output */
|
|
|
- Vect_open_new(&Out, parm.out->answer, 0); /* TODO add z support ? */
|
|
|
+ Vect_open_new(&Out, parm.out->answer, WITHOUT_Z); /* TODO add z support ? */
|
|
|
|
|
|
Vect_hist_copy(&In, &Out);
|
|
|
Vect_hist_command(&Out);
|
|
@@ -174,6 +162,9 @@ int main(int argc, char **argv)
|
|
|
|
|
|
type = Vect_read_line(&In, Points, Cats, line);
|
|
|
|
|
|
+ if (field != -1 && !Vect_cat_get(Cats, field, NULL))
|
|
|
+ continue;
|
|
|
+
|
|
|
if (type & GV_POINT) {
|
|
|
if (i >= 800) {
|
|
|
/* Generate some more random numbers */
|