[GRASS-SVN] r39906 - grass/trunk/vector/v.sample
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Dec 6 03:42:48 EST 2009
Author: martinl
Date: 2009-12-06 03:42:48 -0500 (Sun, 06 Dec 2009)
New Revision: 39906
Modified:
grass/trunk/vector/v.sample/main.c
Log:
v.sample: OGR support (read access)
Modified: grass/trunk/vector/v.sample/main.c
===================================================================
--- grass/trunk/vector/v.sample/main.c 2009-12-06 08:38:43 UTC (rev 39905)
+++ grass/trunk/vector/v.sample/main.c 2009-12-06 08:42:48 UTC (rev 39906)
@@ -1,25 +1,14 @@
-/*-
- * s.sample - GRASS program to sample a raster map at site locations.
- * Copyright (C) 1994. James Darrell McCauley.
+/****************************************************************
*
- * Author: James Darrell McCauley darrell at mccauley-usa.com
- * http://mccauley-usa.com/
+ * MODULE: v.sample (based on s.sample)
*
- * 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.
+ * AUTHOR(S): James Darrell McCauley darrell at mccauley-usa.com
+ * http://mccauley-usa.com/
+ * OGR support by Martin Landa <landa.martin gmail.com>
*
- * 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.
+ * PURPOSE: GRASS program to sample a raster map at site locations.
*
- * 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.
- *
* Modification History:
* <04 Jan 1994> - began coding (jdm)
* <06 Jan 1994> - announced version 0.1B on pasture.ecn.purdue.edu (jdm)
@@ -34,21 +23,25 @@
* 0.8B (jdm)
* <13 Sep 2000> - released under GPL
*
- */
+ * COPYRIGHT: (C) 2003-2009 by the GRASS Development Team
+ *
+ * This program is free software under the GNU General
+ * Public License (>=v2). Read the file COPYING that
+ * comes with GRASS for details.
+ *
+**************************************************************/
-/* s.sample v 0.8B <15 Jun 1995>; Copyright (c) 1994-1995. James Darrell McCauley" */
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
+
#include <grass/gis.h>
#include <grass/raster.h>
#include <grass/glocale.h>
#include <grass/dbmi.h>
#include <grass/vector.h>
-
int main(int argc, char **argv)
{
double scale, predicted, actual;
@@ -59,13 +52,9 @@
struct Map_info In, Out;
struct
{
- struct Option *input, *output, *rast, *z, *column;
+ struct Option *input, *output, *rast, *z, *column, *method, *field;
} parm;
- struct
- {
- struct Flag *B, *C;
- } flag;
-
+
int line, nlines;
struct line_pnts *Points;
struct line_cats *Cats;
@@ -84,77 +73,73 @@
module = G_define_module();
G_add_keyword(_("vector"));
+ G_add_keyword(_("raster"));
+ G_add_keyword(_("resample"));
module->description =
_("Samples a raster map at vector point locations.");
parm.input = G_define_standard_option(G_OPT_V_INPUT);
- parm.input->description = _("Vector map defining sample points");
+ parm.input->label = _("Name of input vector point map");
- parm.column = G_define_option();
- parm.column->key = "column";
- parm.column->type = TYPE_STRING;
+ parm.field = G_define_standard_option(G_OPT_V_FIELD);
+
+ parm.column = G_define_standard_option(G_OPT_DB_COLUMN);
parm.column->required = YES;
parm.column->description =
- _("Vector map attribute column to use for comparison");
+ _("Name of attribute column to use for comparison");
parm.output = G_define_standard_option(G_OPT_V_OUTPUT);
- parm.output->description = _("Vector map to store differences");
+ parm.output->description = _("Name for output vector map to store differences");
parm.rast = G_define_standard_option(G_OPT_R_INPUT);
parm.rast->key = "raster";
- parm.rast->description = _("Raster map to be sampled");
+ parm.rast->description = _("Name of raster map to be sampled");
+ parm.method = G_define_option();
+ parm.method->key = "method";
+ parm.method->type = TYPE_STRING;
+ parm.method->required = NO;
+ parm.method->description = _("Interpolation method");
+ parm.method->options = "nearest,bilinear,bicubic";
+ parm.method->answer = "nearest";
+
parm.z = G_define_option();
parm.z->key = "z";
parm.z->type = TYPE_DOUBLE;
parm.z->required = NO;
parm.z->answer = "1.0";
- parm.z->description =
- _("Option scaling factor for values read from raster map. "
- "Sampled values will be multiplied by this factor");
-
- flag.B = G_define_flag();
- flag.B->key = 'b';
- flag.B->description =
- _("Bilinear interpolation (default is nearest neighbor)");
-
- flag.C = G_define_flag();
- flag.C->key = 'c';
- flag.C->description =
- _("Cubic convolution interpolation (default is nearest neighbor)");
-
+ parm.z->label =
+ _("Scaling factor for values read from raster map");
+ parm.z->description =
+ _("Sampled values will be multiplied by this factor");
+
if (G_parser(argc, argv))
exit(EXIT_FAILURE);
sscanf(parm.z->answer, "%lf", &scale);
- if (flag.B->answer || flag.C->answer) {
- if (flag.C->answer)
- method = CUBIC;
- if (flag.B->answer)
- method = BILINEAR;
- if (flag.B->answer && flag.C->answer)
- G_fatal_error(_("Flags -b & -c are mutually exclusive. Choose only one."));
- }
- else {
+ if (parm.method->answer[0] == 'c')
+ method = CUBIC;
+ else if (parm.method->answer[0] == 'b')
+ method = BILINEAR;
+ else
method = NEAREST;
- }
-
+
G_get_window(&window);
/* Open input */
Vect_set_open_level(2);
- Vect_open_old(&In, parm.input->answer, "");
-
+ Vect_open_old2(&In, parm.input->answer, "", parm.field->answer);
+ field = Vect_get_field_number(&In, parm.field->answer);
+
if ((fdrast = Rast_open_old(parm.rast->answer, "")) < 0)
G_fatal_error(_("Unable to open raster map <%s>"), parm.rast->answer);
/* Read attributes */
- field = 1;
Fi = Vect_get_field(&In, field);
if (Fi == NULL)
- G_fatal_error(_("Database connection not defined for layer %d"),
- field);
+ G_fatal_error(_("Database connection not defined for layer %s"),
+ parm.field->answer);
Driver = db_start_driver_open_database(Fi->driver, Fi->database);
if (Driver == NULL)
@@ -173,7 +158,7 @@
if (nrecords < 0)
G_fatal_error(_("Unable to select data from table"));
- G_message(_("%d records selected from table"), nrecords);
+ G_verbose_message(_("%d records selected from table"), nrecords);
db_close_database_shutdown_driver(Driver);
@@ -212,7 +197,7 @@
G_fatal_error(_("Unable to grant privileges on table <%s>"),
Fi->table);
- G_message(_("Checking vector points..."));
+ G_message(_("Reading points..."));
Points = Vect_new_line_struct();
Cats = Vect_new_cats_struct();
@@ -224,12 +209,14 @@
G_debug(3, "line = %d", line);
+ G_percent(line, nlines, 2);
+
type = Vect_read_line(&In, Points, Cats, line);
if (!(type & GV_POINT))
continue;
-
- Vect_cat_get(Cats, 1, &cat);
-
+ if (field != -1 && !Vect_cat_get(Cats, field, &cat))
+ continue;
+
G_debug(4, "cat = %d", cat);
/* find actual value */
More information about the grass-commit
mailing list