Provided by: grass-doc_8.4.1-1_all bug

NAME

       v.fill.holes  - Fill holes in areas by keeping only outer boundaries

KEYWORDS

       vector, geometry, fill, exterior, ring, perimeter

SYNOPSIS

       v.fill.holes
       v.fill.holes --help
       v.fill.holes  input=name   [layer=string]    [cats=range]   [where=sql_query]  output=name  [--overwrite]
       [--help]  [--verbose]  [--quiet]  [--ui]

   Flags:
       --overwrite
           Allow output files to overwrite existing files

       --help
           Print usage summary

       --verbose
           Verbose module output

       --quiet
           Quiet module output

       --ui
           Force launching GUI dialog

   Parameters:
       input=name [required]
           Name of input vector map
           Or data source for direct OGR access

       layer=string
           Layer number or name
           Vector features can have category values in different layers. This number determines which  layer  to
           use. When used with direct OGR access this is the layer name.
           Default: 1

       cats=range
           Category values
           Example: 1,3,7-9,13

       where=sql_query
           WHERE conditions of SQL statement without ’where’ keyword
           Example: income < 1000 and population >= 10000

       output=name [required]
           Name for output vector map

DESCRIPTION

       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.
         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.
         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  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 by extracting everything else
       (results in holes):
       v.extract input=lakes where="FTYPE != ’ROCK/ISLAND’" output=lakes_only
       Remove the holes:
       v.fill.holes input=lakes_only output=lakes_filled
         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 for removing common boundaries based on attributes,

           •   v.clean 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.

AUTHOR

       Vaclav Petras, NCSU Center for Geospatial Analytics, GeoForAll Lab

SOURCE CODE

       Available at: v.fill.holes source code (history)

       Accessed: Friday Apr 04 01:20:16 2025

       Main index | Vector index | Topics index | Keywords index | Graphical index | Full index

       © 2003-2025 GRASS Development Team, GRASS GIS 8.4.1 Reference Manual

GRASS 8.4.1                                                                                 v.fill.holes(1grass)