[GRASS-SVN] r41480 - grass/branches/develbranch_6/vector/v.info
svn_grass at osgeo.org
svn_grass at osgeo.org
Fri Mar 19 12:19:59 EDT 2010
Author: neteler
Date: 2010-03-19 12:19:59 -0400 (Fri, 19 Mar 2010)
New Revision: 41480
Modified:
grass/branches/develbranch_6/vector/v.info/description.html
grass/branches/develbranch_6/vector/v.info/main.c
Log:
backported support for level 1 by Markus Metz
Modified: grass/branches/develbranch_6/vector/v.info/description.html
===================================================================
--- grass/branches/develbranch_6/vector/v.info/description.html 2010-03-19 16:11:02 UTC (rev 41479)
+++ grass/branches/develbranch_6/vector/v.info/description.html 2010-03-19 16:19:59 UTC (rev 41480)
@@ -1,7 +1,11 @@
<h2>DESCRIPTION</h2>
<em>v.info</em> reports some basic information about a
-user-specified vector map layer and the topology status.
+user-specified vector map layer and the topology status.
+<p>
+Vector are opened without topology on level 1 when the <b>-l</b> flag is
+used. With the <b>-l</b> flag set, vector map extends and number of
+features need to be counted on the fly which may take some time.
<h2>EXAMPLE</h2>
Modified: grass/branches/develbranch_6/vector/v.info/main.c
===================================================================
--- grass/branches/develbranch_6/vector/v.info/main.c 2010-03-19 16:11:02 UTC (rev 41479)
+++ grass/branches/develbranch_6/vector/v.info/main.c 2010-03-19 16:19:59 UTC (rev 41480)
@@ -4,15 +4,16 @@
* MODULE: v.info
*
* AUTHOR(S): CERL, updated to 5.7 by Markus Neteler
+ * Update to 7.0 by Martin Landa <landa.martin gmail.com> (2009)
+ * Support for level 1 by Markus Metz (2009)
*
- * PURPOSE: print vector map info
+ * PURPOSE: Print vector map info
*
- * COPYRIGHT: (C) 2002 by the GRASS Development Team
+ * COPYRIGHT: (C) 2002-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.
+ * This program is free software under the GNU General
+ * Public License (>=v2). Read the file COPYING that
+ * comes with GRASS for details.
*
**************************************************************/
#include <string.h>
@@ -37,13 +38,13 @@
*/
void format_double(double, char *);
+int level_one_info(struct Map_info *);
-
int main(int argc, char *argv[])
{
struct GModule *module;
struct Option *in_opt, *fieldopt;
- struct Flag *histf, *columns, *gflag, *tflag, *mflag;
+ struct Flag *histf, *columns, *gflag, *tflag, *mflag, *lflag;
struct Map_info Map;
struct dig_head v_head;
BOUND_BOX box;
@@ -86,6 +87,10 @@
gflag->description = _("Print map region only");
gflag->guisection = _("Print");
+ lflag = G_define_flag();
+ lflag->key = 'l';
+ lflag->description = _("Open Vector without topology (level 1)");
+
mflag = G_define_flag();
mflag->key = 'm';
mflag->description = _("Print map title only");
@@ -104,8 +109,23 @@
G_fatal_error(_("Vector map <%s> not found"), in_opt->answer);
}
- Vect_set_open_level(2);
- Vect_open_old_head(&Map, in_opt->answer, mapset);
+ if (lflag->answer) {
+ Vect_set_open_level(1); /* no topology */
+ if (tflag->answer && Vect_get_num_primitives(&Map, GV_POINT) == 0){
+ G_warning(_("Vector map requested on level 1 (flag -t ignored)"));
+ tflag->answer = 0;
+ }
+ }
+ else
+ Vect_set_open_level(2); /* topology requested */
+
+ if (lflag->answer) {
+ Vect_open_old(&Map, in_opt->answer, "");
+ level_one_info(&Map);
+ }
+ else
+ Vect_open_old_head(&Map, in_opt->answer, "");
+
with_z = Vect_is_3d(&Map);
v_head = Map.head;
@@ -258,7 +278,7 @@
printline(line);
- if (Vect_level(&Map) > 1) {
+ if (Vect_level(&Map) > 0) {
printline("");
sprintf(line,
_(" Number of points: %-9ld Number of areas: %-9ld"),
@@ -288,10 +308,6 @@
(long)Vect_get_num_dblinks(&Map));
printline(line);
}
- else { /* should not be reached */
- sprintf(line, _(" No topology present"));
- printline(line);
- }
printline("");
/* this differs from r.info in that proj info IS taken from the map here, not the location settings */
@@ -348,3 +364,88 @@
sprintf(buf, "%.8f", value);
G_trim_decimal(buf);
}
+
+/* code taken from Vect_build_nat() */
+int level_one_info(struct Map_info *Map)
+{
+ struct Plus_head *plus;
+ int i, type, first = 1;
+ off_t offset;
+ struct line_pnts *Points;
+ struct line_cats *Cats;
+ struct bound_box box;
+
+ int n_primitives, n_points, n_lines, n_boundaries, n_centroids, n_kernels;
+
+ G_debug(1, "Count vector objects for level 1");
+
+ plus = &(Map->plus);
+
+ n_primitives = n_points = n_lines = n_boundaries = n_centroids = n_kernels = 0;
+
+ Points = Vect_new_line_struct();
+ Cats = Vect_new_cats_struct();
+
+ Vect_rewind(Map);
+ /* G_message(_("Registering primitives...")); */
+ i = 1;
+ while (1) {
+ /* register line */
+ type = Vect_read_next_line(Map, Points, Cats);
+
+ /* Note: check for dead lines is not needed, because they are skipped by V1_read_next_line_nat() */
+ if (type == -1) {
+ G_warning(_("Unable to read vector map"));
+ return 0;
+ }
+ else if (type == -2) {
+ break;
+ }
+
+ /* count features */
+ n_primitives++;
+
+ if (type & GV_POINT) /* probably most common */
+ n_points++;
+ else if (type & GV_LINE)
+ n_lines++;
+ else if (type & GV_BOUNDARY)
+ n_boundaries++;
+ else if (type & GV_CENTROID)
+ n_centroids++;
+ else if (type & GV_KERNEL)
+ n_kernels++;
+
+ offset = Map->head.last_offset;
+
+ G_debug(3, "Register line: offset = %lu", (unsigned long)offset);
+ dig_line_box(Points, &box);
+ if (first == 1) {
+ Vect_box_copy(&(plus->box), &box);
+ first = 0;
+ }
+ else
+ Vect_box_extend(&(plus->box), &box);
+
+ /* can't print progress, unfortunately */
+/*
+ if (G_verbose() > G_verbose_min() && i % 1000 == 0) {
+ if (format == G_INFO_FORMAT_PLAIN)
+ fprintf(stderr, "%d..", i);
+ else
+ fprintf(stderr, "%11d\b\b\b\b\b\b\b\b\b\b\b", i);
+ }
+ i++;
+*/
+ }
+
+ /* save result in plus */
+ plus->n_lines = n_primitives;
+ plus->n_plines = n_points;
+ plus->n_llines = n_lines;
+ plus->n_blines = n_boundaries;
+ plus->n_clines = n_centroids;
+ plus->n_klines = n_kernels;
+
+ return 1;
+}
More information about the grass-commit
mailing list