From a3ccd5b9ed2151c02f0a4478e3ff55ffd110ef73 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Wed, 20 Jul 2022 10:52:42 -0400 Subject: [PATCH 01/10] v.fill.holes: Remove isles, keep outer boundary --- vector/Makefile | 1 + vector/v.fill.holes/Makefile | 12 ++ vector/v.fill.holes/main.c | 224 ++++++++++++++++++++++++++ vector/v.fill.holes/v.fill.holes.html | 21 +++ 4 files changed, 258 insertions(+) create mode 100644 vector/v.fill.holes/Makefile create mode 100644 vector/v.fill.holes/main.c create mode 100644 vector/v.fill.holes/v.fill.holes.html diff --git a/vector/Makefile b/vector/Makefile index 1a8f551a438..f195ce3aafb 100644 --- a/vector/Makefile +++ b/vector/Makefile @@ -22,6 +22,7 @@ SUBDIRS = \ v.edit \ v.extract \ v.extrude \ + v.fill.holes \ v.generalize \ v.hull \ v.info \ diff --git a/vector/v.fill.holes/Makefile b/vector/v.fill.holes/Makefile new file mode 100644 index 00000000000..f9f82be44b4 --- /dev/null +++ b/vector/v.fill.holes/Makefile @@ -0,0 +1,12 @@ +MODULE_TOPDIR = ../.. + +PGM = v.fill.holes + +LIBES = $(VECTORLIB) $(DBMILIB) $(GISLIB) +DEPENDENCIES = $(VECTORDEP) $(DBMIDEP) $(GISDEP) +EXTRA_INC = $(VECT_INC) +EXTRA_CFLAGS = $(VECT_CFLAGS) + +include $(MODULE_TOPDIR)/include/Make/Module.make + +default: cmd diff --git a/vector/v.fill.holes/main.c b/vector/v.fill.holes/main.c new file mode 100644 index 00000000000..0cc075c5d56 --- /dev/null +++ b/vector/v.fill.holes/main.c @@ -0,0 +1,224 @@ + +/**************************************************************** + * + * MODULE: v.fill.holes + * + * AUTHOR: Vaclav Petras + * + * PURPOSE: Fill holes in an area, i.e., preserve only its outer boundary + * + * COPYRIGHT: (C) 2022 by Vaclav Petras and 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. + * + ****************************************************************/ + +#include +#include +#include +#include +#include +#include + +struct VFillHolesParameters +{ + struct GModule *module; + struct Option *input; + struct Option *output; + struct Option *field; + struct Option *cats; + struct Option *where; +}; + +int main(int argc, char *argv[]) +{ + struct Map_info input; + struct Map_info output; + int open3d; + + G_gisinit(argv[0]); + + struct VFillHolesParameters options; + + options.module = G_define_module(); + G_add_keyword(_("vector")); + G_add_keyword(_("geometry")); + G_add_keyword(_("fill")); + G_add_keyword(_("exterior")); + G_add_keyword(_("ring")); + G_add_keyword(_("perimeter")); + options.module->description = + _("Fill holes in areas by keeping only outer boundaries"); + + options.input = G_define_standard_option(G_OPT_V_INPUT); + + options.field = G_define_standard_option(G_OPT_V_FIELD); + + options.cats = G_define_standard_option(G_OPT_V_CATS); + + options.where = G_define_standard_option(G_OPT_DB_WHERE); + + options.output = G_define_standard_option(G_OPT_V_OUTPUT); + + if (G_parser(argc, argv)) + exit(EXIT_FAILURE); + + Vect_check_input_output_name(options.input->answer, + options.output->answer, G_FATAL_EXIT); + Vect_set_open_level(2); + + if (1 > + Vect_open_old2(&input, options.input->answer, "", + options.field->answer)) + G_fatal_error(_("Unable to open vector map <%s>"), + options.input->answer); + + /* Check if old vector is 3D. We should preserve 3D data. */ + if (Vect_is_3d(&input)) + open3d = WITH_Z; + else + open3d = WITHOUT_Z; + + /* Set error handler for input vector map */ + Vect_set_error_handler_io(&input, NULL); + + /* Open new vector for reading/writing */ + if (0 > Vect_open_new(&output, options.output->answer, open3d)) { + G_fatal_error(_("Unable to create vector map <%s>"), + options.output->answer); + } + + /* Set error handler for output vector map */ + Vect_set_error_handler_io(NULL, &output); + + int field = Vect_get_field_number(&input, options.field->answer); + + if (field <= 0 && options.cats->answer) + G_fatal_error(_("Option %s cannot be combined with %s=%s"), + options.cats->key, options.field->key, + options.field->answer); + if (field <= 0 && options.where->answer) + G_fatal_error(_("Option %s cannot be combined with %s=%s"), + options.where->key, options.field->key, + options.field->answer); + + /* Copy header and history data from old to new map */ + Vect_copy_head_data(&input, &output); + Vect_hist_copy(&input, &output); + Vect_hist_command(&output); + + // Set category constraint. + struct cat_list *constraint_cat_list = NULL; + + if (field > 0) + constraint_cat_list = + Vect_cats_set_constraint(&input, field, options.where->answer, + options.cats->answer); + + /* Create and initialize struct's where to store points/lines and categories */ + struct line_pnts *points = Vect_new_line_struct(); + struct line_cats *area_cats = Vect_new_cats_struct(); + struct line_cats *empty_cats = Vect_new_cats_struct(); + + struct ilist *all_cats = Vect_new_list(); + struct ilist *field_cats = Vect_new_list(); + + plus_t num_areas = Vect_get_num_areas(&input); + + G_percent(0, num_areas, 1); + for (plus_t area = 1; area <= num_areas; area++) { + G_percent(area, num_areas, 1); + + int centroid = Vect_get_area_centroid(&input, area); + + if (!centroid) + continue; + + Vect_read_line(&input, points, area_cats, centroid); + + if (constraint_cat_list && + !Vect_cats_in_constraint(area_cats, field, constraint_cat_list)) { + continue; + } + Vect_write_line(&output, GV_CENTROID, points, area_cats); + + Vect_get_area_points(&input, area, points); + Vect_write_line(&output, GV_BOUNDARY, points, empty_cats); + + if (field > 0) { + Vect_field_cat_get(area_cats, field, field_cats); + Vect_list_append_list(all_cats, field_cats); + } + } + + Vect_destroy_cats_struct(empty_cats); + Vect_destroy_cats_struct(area_cats); + Vect_destroy_line_struct(points); + + /* Let's get vector layers db connections information */ + struct field_info *input_info = NULL; + + if (field > 0 && all_cats->n_values) + input_info = Vect_get_field2(&input, options.field->answer); + + if (input_info) { + G_verbose_message(_("Copying attributes for layer <%s>"), + options.field->answer); + + + /* outputput information useful for debuging + include/vect/dig_structs.h + */ + G_debug(1, + "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; Table:<%s>; Key:<%s>;\n", + input_info->number, input_info->name, input_info->driver, + input_info->database, input_info->table, input_info->key); + + struct field_info *output_info = + Vect_default_field_info(&output, field, NULL, GV_1TABLE); + /* Create database for new vector map */ + dbDriver *driver = db_start_driver_open_database(output_info->driver, + output_info-> + database); + + G_debug(1, + "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; Table:<%s>; Key:<%s>;\n", + output_info->number, output_info->name, output_info->driver, + output_info->database, output_info->table, output_info->key); + + /* + Vect_map_add_dblink(&output, output_info->number, output_info->name, + output_info->table, input_info->key, + output_info->database, output_info->driver); + */ + + /* Copy attribute table data */ + if (db_copy_table_by_ints + (input_info->driver, input_info->database, input_info->table, + output_info->driver, Vect_subst_var(output_info->database, + &output), output_info->table, + input_info->key, all_cats->value, + all_cats->n_values) == DB_FAILED) + G_fatal_error(_("Unable to copy attribute table to vector map <%s>"), + options.output->answer); + db_close_database_shutdown_driver(driver); + } + + Vect_destroy_list(field_cats); + Vect_destroy_list(all_cats); + + Vect_build(&output); + + Vect_set_release_support(&input); + Vect_set_release_support(&output); + + Vect_close(&input); + + /* Build topology for vector map and close them */ + + Vect_close(&output); + + exit(EXIT_SUCCESS); +} diff --git a/vector/v.fill.holes/v.fill.holes.html b/vector/v.fill.holes/v.fill.holes.html new file mode 100644 index 00000000000..35f4b3fc7aa --- /dev/null +++ b/vector/v.fill.holes/v.fill.holes.html @@ -0,0 +1,21 @@ +

DESCRIPTION

+ +v.fill.holes + +

EXAMPLE

+ + (North Carolina sample dataset): + +
+v.fill.holes input= output=
+
+ +

SEE ALSO

+ + +v.clean, + + +

AUTHOR

+ +Vaclav Petras From 426bf794aefc822bda4ed4e169995f56a5f41d80 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 11 Jul 2023 13:53:06 -0400 Subject: [PATCH 02/10] Write boundaries, not perimeter points, write each boundary only once. Enable copying attributes. Format code. --- vector/v.fill.holes/main.c | 80 +++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/vector/v.fill.holes/main.c b/vector/v.fill.holes/main.c index 0cc075c5d56..5764b2628b4 100644 --- a/vector/v.fill.holes/main.c +++ b/vector/v.fill.holes/main.c @@ -22,8 +22,7 @@ #include #include -struct VFillHolesParameters -{ +struct VFillHolesParameters { struct GModule *module; struct Option *input; struct Option *output; @@ -65,13 +64,12 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); - Vect_check_input_output_name(options.input->answer, - options.output->answer, G_FATAL_EXIT); + Vect_check_input_output_name(options.input->answer, options.output->answer, + G_FATAL_EXIT); Vect_set_open_level(2); - if (1 > - Vect_open_old2(&input, options.input->answer, "", - options.field->answer)) + if (1 > Vect_open_old2(&input, options.input->answer, "", + options.field->answer)) G_fatal_error(_("Unable to open vector map <%s>"), options.input->answer); @@ -113,19 +111,23 @@ int main(int argc, char *argv[]) struct cat_list *constraint_cat_list = NULL; if (field > 0) - constraint_cat_list = - Vect_cats_set_constraint(&input, field, options.where->answer, - options.cats->answer); + constraint_cat_list = Vect_cats_set_constraint( + &input, field, options.where->answer, options.cats->answer); - /* Create and initialize struct's where to store points/lines and categories */ + /* Create and initialize struct's where to store points/lines and categories + */ struct line_pnts *points = Vect_new_line_struct(); struct line_cats *area_cats = Vect_new_cats_struct(); - struct line_cats *empty_cats = Vect_new_cats_struct(); + struct line_cats *boundary_cats = Vect_new_cats_struct(); struct ilist *all_cats = Vect_new_list(); struct ilist *field_cats = Vect_new_list(); + struct ilist *area_boundaries = Vect_new_list(); plus_t num_areas = Vect_get_num_areas(&input); + plus_t num_lines = Vect_get_num_lines(&input); + // Used as index. 0th element is unused. + bool *line_written_out = G_calloc(num_lines + 1, sizeof(bool)); G_percent(0, num_areas, 1); for (plus_t area = 1; area <= num_areas; area++) { @@ -144,8 +146,15 @@ int main(int argc, char *argv[]) } Vect_write_line(&output, GV_CENTROID, points, area_cats); - Vect_get_area_points(&input, area, points); - Vect_write_line(&output, GV_BOUNDARY, points, empty_cats); + Vect_get_area_boundaries(&input, area, area_boundaries); + for (int i = 0; i < area_boundaries->n_values; i++) { + int boundary_id = abs(area_boundaries->value[i]); + if (line_written_out[boundary_id]) + continue; + Vect_read_line(&input, points, boundary_cats, boundary_id); + Vect_write_line(&output, GV_BOUNDARY, points, boundary_cats); + line_written_out[boundary_id] = true; + } if (field > 0) { Vect_field_cat_get(area_cats, field, field_cats); @@ -153,7 +162,7 @@ int main(int argc, char *argv[]) } } - Vect_destroy_cats_struct(empty_cats); + Vect_destroy_cats_struct(boundary_cats); Vect_destroy_cats_struct(area_cats); Vect_destroy_line_struct(points); @@ -167,42 +176,41 @@ int main(int argc, char *argv[]) G_verbose_message(_("Copying attributes for layer <%s>"), options.field->answer); - - /* outputput information useful for debuging + /* outputput information useful for debuging include/vect/dig_structs.h */ G_debug(1, - "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; Table:<%s>; Key:<%s>;\n", + "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; " + "Table:<%s>; Key:<%s>;\n", input_info->number, input_info->name, input_info->driver, input_info->database, input_info->table, input_info->key); struct field_info *output_info = Vect_default_field_info(&output, field, NULL, GV_1TABLE); - /* Create database for new vector map */ - dbDriver *driver = db_start_driver_open_database(output_info->driver, - output_info-> - database); G_debug(1, - "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; Table:<%s>; Key:<%s>;\n", + "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; " + "Table:<%s>; Key:<%s>;\n", output_info->number, output_info->name, output_info->driver, output_info->database, output_info->table, output_info->key); - /* - Vect_map_add_dblink(&output, output_info->number, output_info->name, - output_info->table, input_info->key, - output_info->database, output_info->driver); - */ + /* Create database for new vector map */ + dbDriver *driver = db_start_driver_open_database(output_info->driver, + output_info->database); + Vect_map_add_dblink(&output, output_info->number, output_info->name, + output_info->table, input_info->key, + output_info->database, output_info->driver); /* Copy attribute table data */ - if (db_copy_table_by_ints - (input_info->driver, input_info->database, input_info->table, - output_info->driver, Vect_subst_var(output_info->database, - &output), output_info->table, - input_info->key, all_cats->value, - all_cats->n_values) == DB_FAILED) - G_fatal_error(_("Unable to copy attribute table to vector map <%s>"), - options.output->answer); + if (db_copy_table_by_ints( + input_info->driver, input_info->database, input_info->table, + output_info->driver, + Vect_subst_var(output_info->database, &output), + output_info->table, input_info->key, all_cats->value, + all_cats->n_values) == DB_FAILED) + G_fatal_error( + _("Unable to copy attribute table to vector map <%s>"), + options.output->answer); db_close_database_shutdown_driver(driver); } From 988c2e30bf62448921ece2b5c64bbd8ca026bbb8 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 11 Jul 2023 16:04:51 -0400 Subject: [PATCH 03/10] Remove overly verbose debug comments for the context --- vector/v.fill.holes/main.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/vector/v.fill.holes/main.c b/vector/v.fill.holes/main.c index 5764b2628b4..326501d43dc 100644 --- a/vector/v.fill.holes/main.c +++ b/vector/v.fill.holes/main.c @@ -176,24 +176,8 @@ int main(int argc, char *argv[]) G_verbose_message(_("Copying attributes for layer <%s>"), options.field->answer); - /* outputput information useful for debuging - include/vect/dig_structs.h - */ - G_debug(1, - "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; " - "Table:<%s>; Key:<%s>;\n", - input_info->number, input_info->name, input_info->driver, - input_info->database, input_info->table, input_info->key); - struct field_info *output_info = Vect_default_field_info(&output, field, NULL, GV_1TABLE); - - G_debug(1, - "Field number:%d; Name:<%s>; Driver:<%s>; Database:<%s>; " - "Table:<%s>; Key:<%s>;\n", - output_info->number, output_info->name, output_info->driver, - output_info->database, output_info->table, output_info->key); - /* Create database for new vector map */ dbDriver *driver = db_start_driver_open_database(output_info->driver, output_info->database); From 677f985bfd8513928c84fdedd6ea53f7e84f7f1b Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 11 Jul 2023 16:05:41 -0400 Subject: [PATCH 04/10] Add tests for removal of holes are preservation of attributes --- vector/v.fill.holes/tests/conftest.py | 222 ++++++++++++++++++ .../v.fill.holes/tests/v_fill_holes_test.py | 52 ++++ 2 files changed, 274 insertions(+) create mode 100644 vector/v.fill.holes/tests/conftest.py create mode 100644 vector/v.fill.holes/tests/v_fill_holes_test.py diff --git a/vector/v.fill.holes/tests/conftest.py b/vector/v.fill.holes/tests/conftest.py new file mode 100644 index 00000000000..b68b3a2fd00 --- /dev/null +++ b/vector/v.fill.holes/tests/conftest.py @@ -0,0 +1,222 @@ +"""Fixture for v.fill.holes test""" + +from types import SimpleNamespace + +import pytest + +import grass.script as gs + +DATA = """\ +VERTI: +C 1 1 + 26.4740753 19.30631132 + 1 1 +B 3 + 35.7009422 5.30814651 + 39.02877384 19.25061356 + 35.75831861 33.47996264 +B 3 + 35.75831861 33.47996264 + 26.6354698 35.71764254 + 20.03718292 32.73406934 +C 1 1 + 42.19882036 26.59479373 + 1 3 +B 8 1 + 31.98581981 29.69311974 + 27.51046001 31.70129401 + 26.07604982 27.45543984 + 29.23175224 23.78334976 + 33.82186485 23.20958568 + 35.02676941 26.76692295 + 34.51038174 29.52099052 + 31.98581981 29.69311974 + 1 4 +B 7 1 + 42.02669114 33.25045701 + 39.55950561 28.602968 + 43.00209007 28.37346236 + 45.64140482 31.6439176 + 45.18239356 35.48813691 + 41.96931473 33.99635031 + 42.02669114 33.25045701 + 1 5 +B 7 1 + 23.83836993 17.2998157 + 21.83019566 21.60304627 + 18.27285839 20.45551812 + 17.46958868 17.18506288 + 21.14167877 12.65232668 + 24.3547576 14.48837172 + 23.83836993 17.2998157 + 1 6 +B 7 1 + 31.52680855 17.64407414 + 28.60061176 12.8244559 + 33.36285359 9.66875349 + 36.63330882 13.5129728 + 36.69068523 17.24243929 + 32.33007825 18.21783822 + 31.52680855 17.64407414 + 1 7 +B 7 + 46.35860991 38.87334496 + 33.25872825 43.10254145 + 27.62998922 41.83894698 + 17.32020703 35.66456488 + 11.83505828 29.34659251 + 8.81966238 23.22964653 + 11.43072178 20.57027093 +B 2 + 20.03718292 32.73406934 + 11.43072178 20.57027093 +B 2 + 35.75831861 33.47996264 + 46.35860991 38.87334496 +C 1 1 + 30.9900018 38.79483301 + 1 9 +B 12 1 + 20.38144137 3.7589835 + 2.42754667 6.02567852 + 0.12531832 16.15548326 + 2.65776951 31.69552462 + 12.90268566 49.07734866 + 30.86006679 52.18535694 + 51.58012194 49.53779433 + 57.91124991 36.76042699 + 58.71702983 19.14838012 + 50.88945344 6.02567852 + 41.91076287 0.38521906 + 38.64148309 4.21799476 + 1 10 +B 2 + 11.43072178 20.57027093 + 20.38144137 3.7589835 +B 2 + 20.38144137 3.7589835 + 35.7009422 5.30814651 +B 5 + 46.35860991 38.87334496 + 46.81762117 30.95540071 + 46.2725453 14.68918915 + 41.45292706 12.10725081 + 38.64148309 4.21799476 +B 2 + 38.64148309 4.21799476 + 35.7009422 5.30814651 +C 1 1 + 21.00365167 45.50889472 + 1 11 +""" + +AREAS_WITH_SPACE_GEOMETRY = """\ +VERTI: +B 5 1 + 8.45818088 33.40191653 + 0.60764185 25.08168713 + 0.33924735 9.78320082 + 10.26984373 1.06037967 + 26.37351354 0.12099893 + 1 1 +B 7 1 + 26.37351354 0.12099893 + 42.61138059 4.28111363 + 43.81915583 22.26354492 + 35.16343331 33.26771928 + 23.01858233 34.07290277 + 13.62477494 34.1400014 + 8.45818088 33.40191653 + 1 1 +C 1 1 + 10.40404098 15.75497837 + 1 3 +C 1 1 + 28.85616264 22.12934767 + 1 4 +B 6 1 + 13.62477494 25.282983 + 22.95148371 26.42365962 + 28.05097915 18.90861371 + 31.8085021 10.38708843 + 30.26523374 2.93914115 + 25.03154106 3.74432464 + 1 5 +B 2 1 + 8.45818088 33.40191653 + 13.62477494 25.282983 + 1 2 +B 3 1 + 13.62477494 25.282983 + 22.68308921 15.0168935 + 25.03154106 3.74432464 + 1 2 +B 2 1 + 25.03154106 3.74432464 + 26.37351354 0.12099893 + 1 2 +""" + +AREAS_WITH_SPACE_ATTRIBUTES = """\ +cat,name +3,"Left plot" +4,"Right plot" +""" + +AREAS_WITH_SPACE_ATTRIBUTE_TYPES = """\ +"Integer","String" +""" + + +@pytest.fixture(scope="module") +def area_dataset(tmp_path_factory): + """Create a session and fill mapset with data""" + tmp_path = tmp_path_factory.mktemp("area_dataset") + location = "test" + + areas_name = "test_areas" + areas_with_space_in_between = "areas_with_space_in_between" + + gs.core._create_location_xy(tmp_path, location) # pylint: disable=protected-access + with gs.setup.init(tmp_path / location): + gs.write_command( + "v.in.ascii", input="-", output=areas_name, stdin=DATA, format="standard" + ) + attributes = tmp_path / "test.csv" + attributes.write_text(AREAS_WITH_SPACE_ATTRIBUTES) + attribute_types = tmp_path / "test.csvt" + attribute_types.write_text(AREAS_WITH_SPACE_ATTRIBUTE_TYPES) + # Attributes need to be created first because no vector map of the same name + # can exist when table is imported (interally using v.in.ogr and vector part + # is deleted). + gs.run_command( + "db.in.ogr", input=attributes, output=areas_with_space_in_between + ) + gs.write_command( + "v.in.ascii", + input="-", + output=areas_with_space_in_between, + stdin=AREAS_WITH_SPACE_GEOMETRY, + format="standard", + ) + # Our old cat column is now called cat_, so we need to rename it to cat, + # but that's possible only on vector map level, so connect, rename, and + # reconnect to create indices. + gs.run_command( + "v.db.connect", + map=areas_with_space_in_between, + table=areas_with_space_in_between, + ) + gs.run_command( + "v.db.renamecolumn", map=areas_with_space_in_between, column=("cat_", "cat") + ) + gs.run_command( + "v.db.connect", + map=areas_with_space_in_between, + table=areas_with_space_in_between, + flags="o", + ) + yield SimpleNamespace( + name=areas_name, + areas_with_space_in_between=areas_with_space_in_between, + ) diff --git a/vector/v.fill.holes/tests/v_fill_holes_test.py b/vector/v.fill.holes/tests/v_fill_holes_test.py new file mode 100644 index 00000000000..5bac9c6519b --- /dev/null +++ b/vector/v.fill.holes/tests/v_fill_holes_test.py @@ -0,0 +1,52 @@ +"""Test v.fill.holes outputs""" + +import json + +import grass.script as gs + + +def test_removal(area_dataset): + """Check that holes are removed""" + output = "test" + gs.run_command("v.fill.holes", input=area_dataset.name, output=output) + original_info = gs.vector_info(area_dataset.name) + info = gs.vector_info(output) + removed = 4 + assert info["nodes"] == original_info["nodes"] - removed + assert info["points"] == original_info["points"] + assert info["lines"] == original_info["lines"] + assert info["boundaries"] == original_info["boundaries"] - removed + assert info["centroids"] == original_info["centroids"] + assert info["areas"] == original_info["areas"] - removed + assert info["islands"] == original_info["islands"] - removed + assert info["primitives"] == original_info["primitives"] - removed + + +def test_no_change(area_dataset): + """Check that space in between is not changed including attributes""" + output = "no_change" + gs.run_command( + "v.fill.holes", input=area_dataset.areas_with_space_in_between, output=output + ) + original_info = gs.vector_info(area_dataset.areas_with_space_in_between) + info = gs.vector_info(output) + for item in [ + "nodes", + "points", + "lines", + "boundaries", + "centroids", + "areas", + "islands", + "primitives", + ]: + assert info[item] == original_info[item], item + + records = json.loads(gs.read_command("v.db.select", map=output, format="json"))[ + "records" + ] + assert len(records) == 2 + assert records[0]["cat"] == 3 + assert records[0]["name"] == "Left plot" + assert records[1]["cat"] == 4 + assert records[1]["name"] == "Right plot" From 9e4fa2162f5c9d31f9b8fd4c5fbca2992ef962c9 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 11 Jul 2023 16:59:36 -0400 Subject: [PATCH 05/10] Add documentation including an image and a notebook to generate the image --- vector/v.fill.holes/examples.ipynb | 151 ++++++++++++++++++++++++++ vector/v.fill.holes/v.fill.holes.html | 35 +++++- vector/v.fill.holes/v_fill_holes.png | Bin 0 -> 16779 bytes 3 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 vector/v.fill.holes/examples.ipynb create mode 100644 vector/v.fill.holes/v_fill_holes.png diff --git a/vector/v.fill.holes/examples.ipynb b/vector/v.fill.holes/examples.ipynb new file mode 100644 index 00000000000..f0a48afbfeb --- /dev/null +++ b/vector/v.fill.holes/examples.ipynb @@ -0,0 +1,151 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Graphics for Description of r.series\n", + "\n", + "Requires _pngquant_, _optipng_ and ImageMagic _mogrify_." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from IPython.display import Image\n", + "\n", + "import grass.script as gs\n", + "import grass.jupyter as gj" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gj.init(\"~/grassdata/nc_spm_08_grass7/user1\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!v.extract --overwrite input=lakes where=\"FTYPE != 'ROCK/ISLAND'\" output=lakes_only --qq" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!g.region n=243500 s=242800 w=647099 e=648152" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"lakes_only\", legend_label=\"Original\")\n", + "plot.d_legend_vect(flags=\"b\", at=(60,10))\n", + "plot.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!v.fill.holes input=lakes_only output=lakes_filled" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"lakes_filled\", legend_label=\"Filled\")\n", + "plot.d_legend_vect(flags=\"b\", at=(60,10))\n", + "plot.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!v.dissolve input=lakes_filled column=NAME output=lakes_dissolved --qq" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"lakes_dissolved\", legend_label=\"Dissolved\")\n", + "plot.d_legend_vect(flags=\"b\", at=(60,10))\n", + "plot.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"lakes_filled\", color=\"none\", legend_label=\"Filled\")\n", + "plot.d_vect(map=\"lakes_only\", color=\"#33BBEE\", fill_color=\"none\", width=2, legend_label=\"Original\")\n", + "plot.d_legend_vect(flags=\"b\", at=(60,15))\n", + "filename = \"v_fill_holes.png\"\n", + "plot.save(filename)\n", + "!mogrify -trim {filename}\n", + "!pngquant --ext \".png\" -f {filename}\n", + "!optipng -o7 {filename}\n", + "Image(filename)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/vector/v.fill.holes/v.fill.holes.html b/vector/v.fill.holes/v.fill.holes.html index 35f4b3fc7aa..f5fff5dc063 100644 --- a/vector/v.fill.holes/v.fill.holes.html +++ b/vector/v.fill.holes/v.fill.holes.html @@ -1,21 +1,46 @@

DESCRIPTION

-v.fill.holes +v.fill.holes fills empty spaces inside areas (closed boundaries with centroids). +Preseves only areas with centroids while areas without centroids +which typically represent holes are removed. +

EXAMPLE

- (North Carolina sample dataset): +The lakes vector map in the North Carolina sample dataset +contains islands inside lakes. To demonstarate v.fill.holes +we will first remove the islands and then we will fill the holes +created in the lakes to get the whole perimeter of the lakes +including islands. + +Remove the islands (results in holes):
-v.fill.holes input= output=
+v.extract input=lakes where="FTYPE != 'ROCK/ISLAND'" output=lakes_only
 
+Remove the holes: + +
+v.fill.holes input=lakes_only output=lakes_filled
+
+ +
+ + Lake without holes overlapping with the lines marking the original +
+ + Figure: The filled lake (blue) and borders of the original lakes with islands removed (light blue) + +
+

SEE ALSO

-v.clean, + v.dissolve, + v.clean

AUTHOR

-Vaclav Petras +Vaclav Petras, NCSU Center for Geospatial Analytics, GeoForAll Lab diff --git a/vector/v.fill.holes/v_fill_holes.png b/vector/v.fill.holes/v_fill_holes.png new file mode 100644 index 0000000000000000000000000000000000000000..bf280d3002fccc00901f637a29ac291a1a44dc65 GIT binary patch literal 16779 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

i4b|%Mt2_ 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 L^>bP0l+XkK&l Date: Fri, 14 Jul 2023 13:31:28 -0400 Subject: [PATCH 06/10] Add documentation with explanation and example --- vector/v.fill.holes/examples.ipynb | 166 +++++++++++++++++- vector/v.fill.holes/tests/conftest.py | 81 +++++---- vector/v.fill.holes/v.fill.holes.html | 93 ++++++++-- vector/v.fill.holes/v_fill_holes.png | Bin 16779 -> 22650 bytes vector/v.fill.holes/v_fill_holes_filled.png | Bin 0 -> 63831 bytes .../v_fill_holes_filled_with_dissolve.png | Bin 0 -> 45808 bytes 6 files changed, 280 insertions(+), 60 deletions(-) create mode 100644 vector/v.fill.holes/v_fill_holes_filled.png create mode 100644 vector/v.fill.holes/v_fill_holes_filled_with_dissolve.png diff --git a/vector/v.fill.holes/examples.ipynb b/vector/v.fill.holes/examples.ipynb index f0a48afbfeb..28d86332b0a 100644 --- a/vector/v.fill.holes/examples.ipynb +++ b/vector/v.fill.holes/examples.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Graphics for Description of r.series\n", + "# Graphics for Documentation of _v.fill.holes_\n", "\n", - "Requires _pngquant_, _optipng_ and ImageMagic _mogrify_." + "Requires _pngquant_, _optipng_ and _ImageMagic_ (_mogrify_, _montage_)." ] }, { @@ -16,6 +16,7 @@ "outputs": [], "source": [ "import os\n", + "import sys\n", "\n", "from IPython.display import Image\n", "\n", @@ -32,6 +33,155 @@ "gj.init(\"~/grassdata/nc_spm_08_grass7/user1\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Explanation Plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Use data and import code from tests.\n", + "sys.path.append(\"./tests\")\n", + "import conftest\n", + "from pathlib import Path" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "work_dir = Path(\".\")\n", + "conftest.import_data(\n", + " path=work_dir,\n", + " areas_name=\"data\",\n", + " areas_with_space_in_between=\"dissolve_data\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!v.fill.holes input=data output=data_filled" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!g.region vector=data grow=3 res=1\n", + "text_position = (75,5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"data\")\n", + "plot.d_text(at=text_position, color=\"black\", text=\"(a) Original\")\n", + "plot.save(\"original.png\")\n", + "plot.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"data_filled\")\n", + "plot.d_text(at=text_position, color=\"black\", text=\"(b) Filled\")\n", + "plot.save(\"new.png\")\n", + "plot.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "example_1 = \"v_fill_holes_filled.png\"\n", + "!montage original.png new.png -tile 2x1 -geometry +0+0 {example_1}\n", + "Image(example_1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!v.fill.holes input=dissolve_data output=dissolve_data_filled\n", + "!v.db.update map=dissolve_data column=name value=\"area\"\n", + "!v.dissolve input=dissolve_data output=dissolved_data column=name\n", + "!v.fill.holes input=dissolved_data output=dissolved_data_filled" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!g.region vector=dissolve_data grow=2 res=1\n", + "\n", + "text_position = (75,5)\n", + "\n", + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"dissolve_data\")\n", + "plot.d_text(at=text_position, color=\"black\", text=\"(a) Original\")\n", + "plot.save(\"original.png\")\n", + "\n", + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"dissolve_data_filled\")\n", + "plot.d_text(at=text_position, color=\"black\", text=\"() Filled without dissolve\")\n", + "plot.save(\"not_working.png\")\n", + "\n", + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"dissolved_data\")\n", + "plot.d_text(at=text_position, color=\"black\", text=\"(b) Dissloved\")\n", + "plot.save(\"dissolved.png\")\n", + "\n", + "plot = gj.Map(use_region=True, width=700)\n", + "plot.d_background(color=\"white\")\n", + "plot.d_vect(map=\"dissolved_data_filled\")\n", + "plot.d_text(at=text_position, color=\"black\", text=\"(c) Filled\")\n", + "plot.save(\"filled.png\")\n", + "\n", + "example_2 = \"v_fill_holes_filled_with_dissolve.png\"\n", + "!montage original.png dissolved.png filled.png -tile 3x1 -geometry +0+0 {example_2}\n", + "Image(example_2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example" + ] + }, { "cell_type": "code", "execution_count": null, @@ -47,7 +197,7 @@ "metadata": {}, "outputs": [], "source": [ - "!g.region n=243500 s=242800 w=647099 e=648152" + "!g.region n=243300 s=242950 w=647200 e=648000" ] }, { @@ -113,11 +263,11 @@ "metadata": {}, "outputs": [], "source": [ - "plot = gj.Map(use_region=True, width=700)\n", - "plot.d_background(color=\"white\")\n", - "plot.d_vect(map=\"lakes_filled\", color=\"none\", legend_label=\"Filled\")\n", - "plot.d_vect(map=\"lakes_only\", color=\"#33BBEE\", fill_color=\"none\", width=2, legend_label=\"Original\")\n", - "plot.d_legend_vect(flags=\"b\", at=(60,15))\n", + "plot = gj.Map(use_region=True, width=1024)\n", + "plot.d_background(color=\"#E28A2B\")\n", + "plot.d_vect(map=\"lakes_filled\", color=\"none\", fill_color=\"#384C6B\", legend_label=\"Filled\")\n", + "plot.d_vect(map=\"lakes_only\", color=\"#859BBA\", fill_color=\"none\", width=2, legend_label=\"Original\")\n", + "plot.d_legend_vect(flags=\"b\", at=(80,85), fontsize=22, symbol_size=35)\n", "filename = \"v_fill_holes.png\"\n", "plot.save(filename)\n", "!mogrify -trim {filename}\n", diff --git a/vector/v.fill.holes/tests/conftest.py b/vector/v.fill.holes/tests/conftest.py index b68b3a2fd00..029e1f2817e 100644 --- a/vector/v.fill.holes/tests/conftest.py +++ b/vector/v.fill.holes/tests/conftest.py @@ -168,6 +168,44 @@ """ +def import_data(path, areas_name, areas_with_space_in_between): + gs.write_command( + "v.in.ascii", input="-", output=areas_name, stdin=DATA, format="standard" + ) + attributes = path / "test.csv" + attributes.write_text(AREAS_WITH_SPACE_ATTRIBUTES) + attribute_types = path / "test.csvt" + attribute_types.write_text(AREAS_WITH_SPACE_ATTRIBUTE_TYPES) + # Attributes need to be created first because no vector map of the same name + # can exist when table is imported (interally using v.in.ogr and vector part + # is deleted). + gs.run_command("db.in.ogr", input=attributes, output=areas_with_space_in_between) + gs.write_command( + "v.in.ascii", + input="-", + output=areas_with_space_in_between, + stdin=AREAS_WITH_SPACE_GEOMETRY, + format="standard", + ) + # Our old cat column is now called cat_, so we need to rename it to cat, + # but that's possible only on vector map level, so connect, rename, and + # reconnect to create indices. + gs.run_command( + "v.db.connect", + map=areas_with_space_in_between, + table=areas_with_space_in_between, + ) + gs.run_command( + "v.db.renamecolumn", map=areas_with_space_in_between, column=("cat_", "cat") + ) + gs.run_command( + "v.db.connect", + map=areas_with_space_in_between, + table=areas_with_space_in_between, + flags="o", + ) + + @pytest.fixture(scope="module") def area_dataset(tmp_path_factory): """Create a session and fill mapset with data""" @@ -179,44 +217,11 @@ def area_dataset(tmp_path_factory): gs.core._create_location_xy(tmp_path, location) # pylint: disable=protected-access with gs.setup.init(tmp_path / location): - gs.write_command( - "v.in.ascii", input="-", output=areas_name, stdin=DATA, format="standard" - ) - attributes = tmp_path / "test.csv" - attributes.write_text(AREAS_WITH_SPACE_ATTRIBUTES) - attribute_types = tmp_path / "test.csvt" - attribute_types.write_text(AREAS_WITH_SPACE_ATTRIBUTE_TYPES) - # Attributes need to be created first because no vector map of the same name - # can exist when table is imported (interally using v.in.ogr and vector part - # is deleted). - gs.run_command( - "db.in.ogr", input=attributes, output=areas_with_space_in_between - ) - gs.write_command( - "v.in.ascii", - input="-", - output=areas_with_space_in_between, - stdin=AREAS_WITH_SPACE_GEOMETRY, - format="standard", - ) - # Our old cat column is now called cat_, so we need to rename it to cat, - # but that's possible only on vector map level, so connect, rename, and - # reconnect to create indices. - gs.run_command( - "v.db.connect", - map=areas_with_space_in_between, - table=areas_with_space_in_between, - ) - gs.run_command( - "v.db.renamecolumn", map=areas_with_space_in_between, column=("cat_", "cat") - ) - gs.run_command( - "v.db.connect", - map=areas_with_space_in_between, - table=areas_with_space_in_between, - flags="o", - ) - yield SimpleNamespace( + import_data( + path=tmp_path, name=areas_name, areas_with_space_in_between=areas_with_space_in_between, ) + yield SimpleNamespace( + name=areas_name, areas_with_space_in_between=areas_with_space_in_between + ) diff --git a/vector/v.fill.holes/v.fill.holes.html b/vector/v.fill.holes/v.fill.holes.html index f5fff5dc063..2931583981d 100644 --- a/vector/v.fill.holes/v.fill.holes.html +++ b/vector/v.fill.holes/v.fill.holes.html @@ -1,19 +1,77 @@

DESCRIPTION

-v.fill.holes fills empty spaces inside areas (closed boundaries with centroids). -Preseves only areas with centroids while areas without centroids -which typically represent holes are removed. +v.fill.holes fills empty spaces inside areas, specifically +it preserves areas with centroids while areas without centroids, +which typically represent holes, are removed. +v.fill.holes goes over all areas in a vector map +and it preserves only outer boundaries of each area +while removing inner boundaries which are considered holes. +The holes become part of the area which contained them. +No boundaries of these holes are preserved. + +
+ + Several areas, some with holes (left) and the same areas but with holes filled (right) +
+ + Figure: Holes inside areas are removed. (a) Original areas with holes and (b) the same areas but with holes filled. + +
+ +In case areas have empty space in between them, +i.e., there are holes in the overall coverage, but not in the areas themselves, +v.fill.holes can't assign this empty space to either of these areas +because it does not know which area this empty space should belong to. +If the space needs to be filled, this can be resolved by merging the areas +around the empty space into one by dissolving their common boundaries. +This turns the empty space into a hole inside one single area +which turns the situation into a case of one area with a hole. + +
+ + Two areas with empty space in between (left), both areas merged (middle), and the empty space filled (right) +
+ + Figure: Empty space in between two areas does not belong to either area, + so it is filled only after the boundaries between areas are dissolved, + i.e., areas merged into one. + (a) Original areas with space in between, + (b) one area with a hole after dissolving the common boundary, and + (c) hole filled. + +
+ +

Topology

+ +Strictly speaking, in the GRASS topological model, an area is a closed boundary +(or a series of connected closed boundaries) which may have a centroid. +If it has a centroid, it is rendered as a filled area in displays and +this is what is usually considered an area from the user perspective. +These are the areas where v.fill.holes preserves the associated outer boundary (or boundaries). +Other closed boundaries, i.e., those without a centroid, are not carried over to the output. +All other features are removed including points and lines. + +

Attributes

+ +If a specific layer is selected, attributes for that layer are preserved +for the areas based on the category or categories associated with each area. +By default, layer number 1 is selected. +In case there are attribute tables associated with other layers or attributes +associated with categories of other features than areas with centroids, +this attribute data is not carried over to the output just like the +corresponding geometries.

EXAMPLE

The lakes vector map in the North Carolina sample dataset -contains islands inside lakes. To demonstarate v.fill.holes -we will first remove the islands and then we will fill the holes -created in the lakes to get the whole perimeter of the lakes -including islands. +represents islands inside lakes as areas distinguished by attributes. +To demonstrate v.fill.holes, we will first extract only the +lakes which will create holes where the islands were located. +Then, we will fill the holes created in the lakes to get +the whole perimeter of the lakes including islands. -Remove the islands (results in holes): +Remove the islands by extracting everything else (results in holes):
 v.extract input=lakes where="FTYPE != 'ROCK/ISLAND'" output=lakes_only
@@ -27,19 +85,26 @@ 

EXAMPLE

- Lake without holes overlapping with the lines marking the original + Lake without holes overlapping with the lines marking the original
- Figure: The filled lake (blue) and borders of the original lakes with islands removed (light blue) + Figure: The filled lake (blue) and borders of the original lakes with islands removed (light blue). + Figure shows a smaller area in the north of the data extent.

SEE ALSO

- - v.dissolve, - v.clean - +
    +
  • + v.dissolve + for removing common boundaries based on attributes, +
  • +
  • + v.clean + for removing topological issues. +
  • +

AUTHOR

diff --git a/vector/v.fill.holes/v_fill_holes.png b/vector/v.fill.holes/v_fill_holes.png index bf280d3002fccc00901f637a29ac291a1a44dc65..03ecdddcb873fc2bcd410eba74803f61f417f0bb 100644 GIT binary patch literal 22650 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 literal 16779 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

i4b|%Mt2_ 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�ORvuBsa$4m(ou-L-q7g_5+l!FIPV^LG44BMpul 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

^0RY}5c=V%*fQJM+Q=Gd3_vgg~=~H?}Fm zs`NMWRFg0E(=P!co3Mw)bPHScCX_Yf*D;?NzLQkTvTNq4yi`{=X>ff9hT75+pr!Rq zyJ!=gj{;ZIj9BOp;)n&6KRbfRmLlG~d2`_1H0{Xo*z`v-yt&@0k7bl+&O2qrAqV)U z<4~i=Hh``UlT~Zc%7SZM1b)5$EKc{9!1eeMHf#0LHK$%g(=#&0$HyN7p2t_Y1=1Do zzeN%x-|JzXLd4XQQQdrgGzAEK1dGTz@GiUKgUgL>HM101GIX+ zdV1-It&5Ax{rmUzI>Fb!=8bnHd*kJ>W98`zxV1j+H(wbWAT>3h)|@WIySH=$+Zt+V zxm}(g^C1O$Q^fay!XnjFsHv*j$5)1Q#+B6G8r+zud}0ZPW%I8x7*;;)hu$B;Th&@& z-Z@%olngL`UB9Lz5}?S8(#U%!5p*Wk(mtOq_` z-iks+xIF_OsQ|k6?j8=4i2<1!{Hf{*Y!X0pZgLt><0tHEGBPqQ&Iy149g0r7YLeHY zK-z=s*b__3pW}TG5aj>wwG%VZTz`%qmP9P_zehaLE&um0BqK^be~$nE-<)_!LQ0e8 U7S32plolZ`71ZQQpPPR8AG9omQ2+n{ literal 0 HcmV?d00001 diff --git a/vector/v.fill.holes/v_fill_holes_filled_with_dissolve.png b/vector/v.fill.holes/v_fill_holes_filled_with_dissolve.png new file mode 100644 index 0000000000000000000000000000000000000000..75e9688930d4b20d4395773837bedcada9084751 GIT binary patch literal 45808 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 F`X@n*dP@KR literal 0 HcmV?d00001 From b1666510afc3fa8cef86372d9d4bb22bc7261132 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Fri, 14 Jul 2023 13:44:56 -0400 Subject: [PATCH 07/10] Fix name in test --- vector/v.fill.holes/tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/v.fill.holes/tests/conftest.py b/vector/v.fill.holes/tests/conftest.py index 029e1f2817e..a86a07cc043 100644 --- a/vector/v.fill.holes/tests/conftest.py +++ b/vector/v.fill.holes/tests/conftest.py @@ -219,7 +219,7 @@ def area_dataset(tmp_path_factory): with gs.setup.init(tmp_path / location): import_data( path=tmp_path, - name=areas_name, + areas_name=areas_name, areas_with_space_in_between=areas_with_space_in_between, ) yield SimpleNamespace( From 153d0b119119a820b548b283de094613272c6cca Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Fri, 14 Jul 2023 15:51:12 -0400 Subject: [PATCH 08/10] Add to menu, cross-link in see also sections --- gui/wxpython/xml/toolboxes.xml | 3 +++ raster/r.fill.stats/r.fill.stats.html | 3 ++- scripts/r.fillnulls/r.fillnulls.html | 3 ++- vector/v.clean/v.clean.html | 1 + vector/v.fill.holes/v.fill.holes.html | 10 +++++++++- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gui/wxpython/xml/toolboxes.xml b/gui/wxpython/xml/toolboxes.xml index 6070a7bb49b..7859ea56724 100644 --- a/gui/wxpython/xml/toolboxes.xml +++ b/gui/wxpython/xml/toolboxes.xml @@ -1214,6 +1214,9 @@ + + + diff --git a/raster/r.fill.stats/r.fill.stats.html b/raster/r.fill.stats/r.fill.stats.html index 5b534c9a3cd..6cffdc04182 100644 --- a/raster/r.fill.stats/r.fill.stats.html +++ b/raster/r.fill.stats/r.fill.stats.html @@ -504,7 +504,8 @@

SEE ALSO

r.surf.idw, v.surf.bspline, v.surf.idw, -v.surf.rst +v.surf.rst, +v.fill.holes

diff --git a/scripts/r.fillnulls/r.fillnulls.html b/scripts/r.fillnulls/r.fillnulls.html index 61f16930807..240d3259394 100644 --- a/scripts/r.fillnulls/r.fillnulls.html +++ b/scripts/r.fillnulls/r.fillnulls.html @@ -128,7 +128,8 @@

SEE ALSO

r.mapcalc, r.resamp.bspline, v.surf.bspline, -v.surf.rst +v.surf.rst, +v.fill.holes

AUTHORS

diff --git a/vector/v.clean/v.clean.html b/vector/v.clean/v.clean.html index 8688700e3dc..35d500a7bf8 100644 --- a/vector/v.clean/v.clean.html +++ b/vector/v.clean/v.clean.html @@ -375,6 +375,7 @@

SEE ALSO

v.build, g.gui.vdigit, v.edit, +v.fill.holes, v.generalize diff --git a/vector/v.fill.holes/v.fill.holes.html b/vector/v.fill.holes/v.fill.holes.html index 2931583981d..488d98328ff 100644 --- a/vector/v.fill.holes/v.fill.holes.html +++ b/vector/v.fill.holes/v.fill.holes.html @@ -102,7 +102,15 @@

SEE ALSO

  • v.clean - for removing topological issues. + for removing topological issues, +
  • +
  • + r.fillnulls + for filling empty spaces in raster maps using interpolation, +
  • +
  • + r.fill.stats + for filling empty spaces in raster maps using statistics.
  • From e87eeda166e4a001ee673b61508e321f929fab31 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Fri, 14 Jul 2023 16:15:47 -0400 Subject: [PATCH 09/10] Remove memory release --- vector/v.fill.holes/main.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/vector/v.fill.holes/main.c b/vector/v.fill.holes/main.c index 326501d43dc..05d6c1b4ae9 100644 --- a/vector/v.fill.holes/main.c +++ b/vector/v.fill.holes/main.c @@ -202,10 +202,6 @@ int main(int argc, char *argv[]) Vect_destroy_list(all_cats); Vect_build(&output); - - Vect_set_release_support(&input); - Vect_set_release_support(&output); - Vect_close(&input); /* Build topology for vector map and close them */ From 05fc2e49e5c5f189860cd36ff414e0c4ce65de82 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 18 Jul 2023 11:40:21 -0400 Subject: [PATCH 10/10] Fix copyright year and see also link --- vector/v.fill.holes/main.c | 2 +- vector/v.fill.holes/v.fill.holes.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/v.fill.holes/main.c b/vector/v.fill.holes/main.c index 05d6c1b4ae9..8f8bf20a0bf 100644 --- a/vector/v.fill.holes/main.c +++ b/vector/v.fill.holes/main.c @@ -7,7 +7,7 @@ * * PURPOSE: Fill holes in an area, i.e., preserve only its outer boundary * - * COPYRIGHT: (C) 2022 by Vaclav Petras and the GRASS Development Team + * COPYRIGHT: (C) 2023 by Vaclav Petras and the GRASS Development Team * * This program is free software under the GNU General * Public License (>=v2). Read the file COPYING that diff --git a/vector/v.fill.holes/v.fill.holes.html b/vector/v.fill.holes/v.fill.holes.html index 488d98328ff..7bb7ef1cbad 100644 --- a/vector/v.fill.holes/v.fill.holes.html +++ b/vector/v.fill.holes/v.fill.holes.html @@ -109,7 +109,7 @@

    SEE ALSO

    for filling empty spaces in raster maps using interpolation,
  • - r.fill.stats + r.fill.stats for filling empty spaces in raster maps using statistics.