[GRASS-SVN] r52777 - grass/trunk/lib/vector/Vlib

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Aug 20 07:16:08 PDT 2012


Author: mmetz
Date: 2012-08-20 07:16:08 -0700 (Mon, 20 Aug 2012)
New Revision: 52777

Modified:
   grass/trunk/lib/vector/Vlib/build.c
   grass/trunk/lib/vector/Vlib/field.c
   grass/trunk/lib/vector/Vlib/map.c
   grass/trunk/lib/vector/Vlib/read.c
   grass/trunk/lib/vector/Vlib/remove_areas.c
Log:
Vlib partially revert r52776

Modified: grass/trunk/lib/vector/Vlib/build.c
===================================================================
--- grass/trunk/lib/vector/Vlib/build.c	2012-08-20 14:07:12 UTC (rev 52776)
+++ grass/trunk/lib/vector/Vlib/build.c	2012-08-20 14:16:08 UTC (rev 52777)
@@ -745,17 +745,16 @@
 */
 void Vect__build_downgrade(struct Map_info *Map, int build)
 {
-    int line, area;
+    int line;
     struct Plus_head *plus;
     struct P_line *Line;
-    struct P_area *Area;
     
     plus = &(Map->plus);
     
     /* lower level request - release old sources (this also
        initializes structures and numbers of elements) */
     if (plus->built >= GV_BUILD_CENTROIDS && build < GV_BUILD_CENTROIDS) {
-        /* reset info about centroids stored for areas */
+        /* reset info about areas stored for centroids */
         for (line = 1; line <= plus->n_lines; line++) {
             Line = plus->Line[line];
             if (Line && Line->type == GV_CENTROID) {
@@ -763,13 +762,10 @@
                 topo->area = 0;
             }
         }
-        /* reset info about areas stored for centroids */
-        for (area = 1; area <= plus->n_areas; area++) {
-            Area = plus->Area[area];
-	    if (Area)
-		Area->centroid = 0;
-        }
-	/* keep areas and isles */
+        dig_free_plus_areas(plus);
+        dig_spidx_free_areas(plus);
+        dig_free_plus_isles(plus);
+        dig_spidx_free_isles(plus);
     }
     
     if (plus->built >= GV_BUILD_AREAS && build < GV_BUILD_AREAS) {

Modified: grass/trunk/lib/vector/Vlib/field.c
===================================================================
--- grass/trunk/lib/vector/Vlib/field.c	2012-08-20 14:07:12 UTC (rev 52776)
+++ grass/trunk/lib/vector/Vlib/field.c	2012-08-20 14:16:08 UTC (rev 52777)
@@ -232,37 +232,27 @@
   \brief Add new DB connection to dblinks structure
   
   \param[in,out] p pointer to existing dblinks structure
-  \param number  layer number (1 for OGR)
-  \param lname   layer name (layer for OGR) - if not given use table name
-  \param table   table name (layer for OGR)
-  \param key     key name
-  \param db      database name (datasource for OGR)
-  \param driver  driver name (dbf, postgresql, ogr, ...)
+  \param number layer number (1 for OGR)
+  \param name   layer name (layer for OGR) - if not given use table name
+  \param table  table name (layer for OGR)
+  \param key    key name
+  \param db     database name (datasource for OGR)
+  \param driver driver name (dbf, postgresql, ogr, ...)
   
   \return 0 on success
   \return -1 error
  */
-int Vect_add_dblink(struct dblinks *p, int number, const char *lname,
+int Vect_add_dblink(struct dblinks *p, int number, const char *name,
 		    const char *table, const char *key, const char *db,
 		    const char *driver)
 {
     int ret;
-    char *name = NULL;
 
     G_debug(3, "Field number <%d>, name <%s>", number, name);
-    if (lname) {
-	name = G_store(lname);
+    if (!name) {
+	/* if name is not given, use table name */
+	name = table;
     }
-    else if (table) {
-	/* if layer name is not given, use table name */
-	name = G_store(table);
-    }
-    if (name) {
-	/* replace all spaces with underscore, otherwise dbln can't be read */
-	G_strip(name);
-	G_strchg(name, ' ', '_');
-    }
-
     ret = Vect_check_dblink(p, number, name);
     if (ret == 1) {
 	G_warning(_("Layer number %d or name <%s> already exists"), number,
@@ -279,8 +269,11 @@
 
     p->field[p->n_fields].number = number;
 
-    if (name != NULL)
-	p->field[p->n_fields].name = name;
+    if (name != NULL) {
+	p->field[p->n_fields].name = G_store(name);
+	/* replace all spaces with underscore, otherwise dbln can't be read */
+	G_strchg(p->field[p->n_fields].name, ' ', '_');
+    }
     else
 	p->field[p->n_fields].name = NULL;
 
@@ -314,18 +307,17 @@
   
   \param Map pointer to Map_info structure
   \param field layer number
-  \param name layer name
+  \param field_name layer name
   \param type how many tables are linked to map: GV_1TABLE / GV_MTABLE 
 
   \return pointer to allocated field_info structure
  */
 struct field_info *Vect_default_field_info(struct Map_info *Map,
-					   int field, const char *name, int type)
+					   int field, const char *field_name, int type)
 {
     struct field_info *fi;
     char buf[GNAME_MAX], buf2[GNAME_MAX];
     const char *schema;
-    char *field_name = NULL;
     dbConnection connection;
 
     G_debug(1, "Vect_default_field_info(): map = %s field = %d", Map->name,
@@ -369,11 +361,6 @@
 	sprintf(buf, "%s", Map->name);
     }
     else {
-	if (name) {
-	    field_name = G_store(name);
-	    G_strip(field_name);
-	    G_strchg(field_name, ' ', '_');
-	}
 	if (field_name != NULL && strlen(field_name) > 0)
 	    sprintf(buf, "%s_%s", Map->name, field_name);
 	else
@@ -389,10 +376,8 @@
     }
 
     /* Field name */
-    if (field_name) {
+    if (field_name)
 	fi->name = G_store(field_name);
-	G_free(field_name);
-    }
     else
 	fi->name = G_store(buf);
 

Modified: grass/trunk/lib/vector/Vlib/map.c
===================================================================
--- grass/trunk/lib/vector/Vlib/map.c	2012-08-20 14:07:12 UTC (rev 52776)
+++ grass/trunk/lib/vector/Vlib/map.c	2012-08-20 14:16:08 UTC (rev 52777)
@@ -39,7 +39,7 @@
  */
 static int copy_file(const char *src, const char *dst)
 {
-    char buf[4096];
+    char buf[1024];
     int fd, fd2;
     FILE *f2;
     int len, len2;
@@ -55,7 +55,7 @@
 
     fd2 = fileno(f2);
 
-    while ((len = read(fd, buf, sizeof(buf))) > 0) {
+    while ((len = read(fd, buf, 1024)) > 0) {
         while (len && (len2 = write(fd2, buf, len)) >= 0)
             len -= len2;
     }

Modified: grass/trunk/lib/vector/Vlib/read.c
===================================================================
--- grass/trunk/lib/vector/Vlib/read.c	2012-08-20 14:07:12 UTC (rev 52776)
+++ grass/trunk/lib/vector/Vlib/read.c	2012-08-20 14:16:08 UTC (rev 52777)
@@ -138,11 +138,11 @@
 /*!
    \brief Read vector feature
 
-   This function implements random access. Note that constraints are
-   ignored! Needs at least GV_BUILD_BASE topology.
+   This function implements random access. Note that constraits are
+   ignored!
 
    G_fatal_error() is called on failure.
-
+   
    \param Map pointer to vector map
    \param[out] line_p feature geometry
    (pointer to line_pnts struct)

Modified: grass/trunk/lib/vector/Vlib/remove_areas.c
===================================================================
--- grass/trunk/lib/vector/Vlib/remove_areas.c	2012-08-20 14:07:12 UTC (rev 52776)
+++ grass/trunk/lib/vector/Vlib/remove_areas.c	2012-08-20 14:16:08 UTC (rev 52777)
@@ -31,7 +31,7 @@
    \return number of removed areas 
  */
 int
-Vect_remove_small_areas_org(struct Map_info *Map, double thresh,
+Vect_remove_small_areas(struct Map_info *Map, double thresh,
 			struct Map_info *Err, double *removed_area)
 {
     int area, nareas;
@@ -101,7 +101,7 @@
 	}
 	G_debug(3, "num neighbours = %d", AList->n_values);
 
-	/* Go through the list of neighours and find that with the longest boundary */
+	/* Go through the list of neghours and find that with the longest boundary */
 	dissolve_neighbour = 0;
 	length = -1.0;
 	for (i = 0; i < AList->n_values; i++) {
@@ -178,129 +178,3 @@
 
     return (nremoved);
 }
-
-int
-Vect_remove_small_areas(struct Map_info *Map, double thresh,
-			struct Map_info *Err, double *removed_area)
-{
-    int area, nareas;
-    int nremoved = 0;
-    struct ilist *List;
-    struct ilist *AList;
-    struct line_pnts *Points;
-    struct line_cats *Cats;
-    double size_removed = 0.0;
-    int left, right, dissolve_neighbour;
-
-    List = Vect_new_list();
-    AList = Vect_new_list();
-    Points = Vect_new_line_struct();
-    Cats = Vect_new_cats_struct();
-
-    nareas = Vect_get_num_areas(Map);
-    for (area = 1; area <= Vect_get_num_areas(Map); area++) {
-	int i, centroid, remove_boundary;
-	double length, size;
-
-	if (area <= nareas)
-	    G_percent(area, nareas, 1);
-	G_debug(3, "area = %d", area);
-	if (!Vect_area_alive(Map, area))
-	    continue;
-
-	size = Vect_get_area_area(Map, area);
-	if (size > thresh)
-	    continue;
-	size_removed += size;
-
-	/* The area is smaller than the limit -> remove */
-
-	/* Remove centroid */
-	centroid = Vect_get_area_centroid(Map, area);
-	if (centroid > 0) {
-	    if (Err) {
-		Vect_read_line(Map, Points, Cats, centroid);
-		Vect_write_line(Err, GV_CENTROID, Points, Cats);
-	    }
-	    Vect_delete_line(Map, centroid);
-	}
-
-	/* Find the adjacent area with which the longest boundary is shared */
-
-	Vect_get_area_boundaries(Map, area, List);
-
-	/* Go through the list of boundaries and find the longest boundary */
-	remove_boundary = 0;
-	length = -1.0;
-	for (i = 0; i < List->n_values; i++) {
-	    int line;
-	    double l = 0.0;
-
-	    line = List->value[i];
-	    G_debug(4, "   line = %d", line);
-
-	    Vect_read_line(Map, Points, NULL, abs(line));
-	    l = Vect_line_length(Points);
-
-	    if (l > length) {
-		length = l;
-		remove_boundary = line;
-	    }
-	}
-
-	G_debug(3, "remove_boundary = %d", remove_boundary);
-
-	Vect_get_line_areas(Map, abs(remove_boundary), &left, &right);
-	if (remove_boundary > 0)
-	    dissolve_neighbour = left;
-	else
-	    dissolve_neighbour = right;
-
-	G_debug(3, "dissolve_neighbour = %d", dissolve_neighbour);
-
-	/* Make list of boundaries to be removed */
-	Vect_reset_list(AList);
-	for (i = 0; i < List->n_values; i++) {
-	    int line, neighbour;
-
-	    line = List->value[i];
-	    Vect_get_line_areas(Map, abs(line), &left, &right);
-	    if (line > 0)
-		neighbour = left;
-	    else
-		neighbour = right;
-
-	    G_debug(3, "   neighbour = %d", neighbour);
-
-	    if (neighbour == dissolve_neighbour) {
-		Vect_list_append(AList, abs(line));
-	    }
-	}
-
-	/* Remove boundaries */
-	for (i = 0; i < AList->n_values; i++) {
-	    int line;
-
-	    line = AList->value[i];
-
-	    if (Err) {
-		Vect_read_line(Map, Points, Cats, line);
-		Vect_write_line(Err, GV_BOUNDARY, Points, Cats);
-	    }
-	    Vect_delete_line(Map, line);
-	}
-
-	nremoved++;
-    }
-
-    if (removed_area)
-	*removed_area = size_removed;
-
-    G_verbose_message(_("%d areas of total size %g removed"), nremoved,
-		size_removed);
-
-    Vect_build_partial(Map, GV_BUILD_BASE);
-    Vect_merge_lines(Map, GV_BOUNDARY, NULL, NULL);
-
-    return (nremoved);
-}



More information about the grass-commit mailing list