[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