Skip to contents

read_VECT moves one GRASS vector object file with attribute data through a temporary GeoPackage file to a terra::SpatVector object; write_VECT moves a terra::SpatVector object through a temporary GeoPackage file to a GRASS vector object file. vect2neigh returns neighbour pairs with shared boundary length as described by Markus Neteler, in https://stat.ethz.ch/pipermail/r-sig-geo/2005-October/000616.html. cygwin_clean_temp can be called to try to clean the GRASS mapset-specific temporary directory under cygwin.

Usage

read_VECT(
  vname,
  layer = "",
  proxy = FALSE,
  use_gdal_grass_driver = TRUE,
  type = NULL,
  flags = "overwrite",
  Sys_ignore.stdout = FALSE,
  ignore.stderr = get.ignore.stderrOption()
)

write_VECT(
  x,
  vname,
  flags = "overwrite",
  ignore.stderr = get.ignore.stderrOption()
)

vInfo(vname, layer, ignore.stderr = NULL)

vColumns(vname, layer, ignore.stderr = NULL)

vDataCount(vname, layer, ignore.stderr = NULL)

vect2neigh(
  vname,
  ID = NULL,
  ignore.stderr = NULL,
  remove = TRUE,
  vname2 = NULL,
  units = "k"
)

Arguments

vname

A GRASS vector file name.

layer

a layer name (string); if missing the first layer will be used.

proxy

Default is FALSE. Set as TRUE if you need a SpatVectorProxy object.

use_gdal_grass_driver

Default TRUE. The standalone GDAL-GRASS driver for the vector format will be used if it is installed. The advantage is that no intermediate file needs to be written from GRASS GIS and subsequently read into R; instead the vector layer is read directly from the GRASS GIS database. Please read the Note further below!.

type

override type detection when multiple types are non-zero, passed to v.out.ogr.

flags

Character vector containing additional optional flags and/or options for v.in.ogr, particularly "o" and "overwrite".

Sys_ignore.stdout

Passed to system.

ignore.stderr

default the value set by set.ignore.stderrOption; NULL, taking the value set by set.ignore.stderrOption, can be set to TRUE to silence system() output to standard error; does not apply on Windows platforms.

x

A SpatVector object moved to GRASS.

ID

A valid DB column name for unique identifiers (optional).

remove

default TRUE, remove copied vectors created in vect2neigh.

vname2

If on a previous run, remove was FALSE, the name of the temporary vector may be given to circumvent its generation.

units

default "k"; see GRASS 'v.to.db' manual page for alternatives.

Value

read_VECT imports a GRASS vector layer into a SpatVector or SpatVectorProxy object. vect2neigh returns a data frame object with left and right neighbours and boundary lengths, also given class GRASSneigh and spatial.neighbour (as used in spdep). The incantation to retrieve the neighbours list is sn2listw(vect2neigh())$neighbours, and to retrieve the boundary lengths: sn2listw(vect2neigh())$weights. The GRASSneigh object has two other useful attributes: external is a vector giving the length of shared boundary between each polygon and the external area, and total giving each polygon's total boundary length.

Note

Be aware that the GDAL-GRASS driver may have some issues for vector data. In our experience, the error and warning messages for vector data can be ignored. Further, the returned metadata about the coordinate reference system may currently be incomplete, e.g. it may miss the EPSG code.

Author

Roger S. Bivand, e-mail: Roger.Bivand@nhh.no

Examples

# Run example if in active GRASS nc_basic_spm_grass7 location
run <- FALSE
if (nchar(Sys.getenv("GISRC")) > 0 &&
    read.dcf(Sys.getenv("GISRC"))[1, "LOCATION_NAME"] == "nc_basic_spm_grass7") {
  run <- TRUE
}

# Store original environment variable settings
GV <- Sys.getenv("GRASS_VERBOSE")
Sys.setenv("GRASS_VERBOSE" = 0)
ois <- get.ignore.stderrOption()
set.ignore.stderrOption(TRUE)
#> [1] FALSE

if (run) {
  # Create a new mapset
  meta <- gmeta()
  location_path <- file.path(meta$GISDBASE, meta$LOCATION_NAME)
  previous_mapset <- meta$MAPSET
  example_mapset <- "RGRASS_EXAMPLES"
  execGRASS("g.mapset", "c", mapset = example_mapset)

  # Report basic metadata about the schools dataset
  execGRASS("v.info", map = "schools", layer = "1")
  print(vInfo("schools"))

  # Read/write as a SpatVector
  schs <- read_VECT("schools")
  print(summary(schs))

  try({
    write_VECT(schs, "newsch", flags = c("o", "overwrite"))
  })
  schs <- read_VECT("schools", use_gdal_grass_driver = FALSE)

  write_VECT(schs, "newsch", flags = c("o", "overwrite"))
  execGRASS("v.info", map = "newsch", layer = "1")

  nschs <- read_VECT("newsch")
  print(summary(nschs))

  print(all.equal(names(nschs), as.character(vColumns("newsch")[, 2])))

  # Show metadata for the roadsmajor dataset and read as spatVector
  print(vInfo("roadsmajor"))
  roads <- read_VECT("roadsmajor")
  print(summary(roads))
}
#>  +----------------------------------------------------------------------------+
#>  | Name:            schools                                                   |
#>  | Mapset:          PERMANENT                                                 |
#>  | Project:         nc_basic_spm_grass7                                       |
#>  | Database:        /home/rsb/topics/grassdata                                |
#>  | Title:           Wake County schools (points map)                          |
#>  | Map scale:       1:1                                                       |
#>  | Name of creator: helena                                                    |
#>  | Organization:    NC OneMap                                                 |
#>  | Source date:     Tue Nov  7 19:34:09 2006                                  |
#>  | Timestamp (first layer): none                                              |
#>  |----------------------------------------------------------------------------|
#>  | Map format:      native                                                    |
#>  |----------------------------------------------------------------------------|
#>  |   Type of map: vector (level: 2)                                           |
#>  |                                                                            |
#>  |   Number of points:       167             Number of centroids:  0          |
#>  |   Number of lines:        0               Number of boundaries: 0          |
#>  |   Number of areas:        0               Number of islands:    0          |
#>  |                                                                            |
#>  |   Map is 3D:              No                                               |
#>  |   Number of dblinks:      1                                                |
#>  |                                                                            |
#>  |   Projection: Lambert Conformal Conic                                      |
#>  |                                                                            |
#>  |               N:   248159.84441077    S:   203559.01136227                 |
#>  |               E:   671714.55110786    W:   619215.13388253                 |
#>  |                                                                            |
#>  |   Digitization threshold: 0                                                |
#>  |   Comment:                                                                 |
#>  |                                                                            |
#>  +----------------------------------------------------------------------------+
#> 
#>      nodes     points      lines boundaries  centroids      areas    islands 
#>          0        167          0          0          0          0          0 
#> primitives      map3d 
#>        167          0 
#>       cat            TAG             NAMESHORT           NAMELONG        
#>  Min.   :  1.0   Length:167         Length:167         Length:167        
#>  1st Qu.: 42.5   Class :character   Class :character   Class :character  
#>  Median : 84.0   Mode  :character   Mode  :character   Mode  :character  
#>  Mean   : 84.0                                                           
#>  3rd Qu.:125.5                                                           
#>  Max.   :167.0                                                           
#>                                                                          
#>    CORECAPACI       MOBILEUNIT       MOBILECAPA      GLEVEL         
#>  Min.   :   0.0   Min.   : 0.000   Min.   :0.00   Length:167        
#>  1st Qu.: 498.5   1st Qu.: 0.000   1st Qu.:0.75   Class :character  
#>  Median : 586.0   Median : 6.000   Median :1.50   Mode  :character  
#>  Mean   : 763.7   Mean   : 7.318   Mean   :1.75                     
#>  3rd Qu.: 903.0   3rd Qu.:11.000   3rd Qu.:2.50                     
#>  Max.   :2294.0   Max.   :49.000   Max.   :4.00                     
#>  NA's   :23       NA's   :19       NA's   :163                      
#>    LOGRADE            HIGRADE            CALENDAR           HASBASE         
#>  Length:167         Length:167         Length:167         Length:167        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>    ISMAGNET            PHONE            ADDRNUMBER         ADDRPREFIX       
#>  Length:167         Length:167         Length:167         Length:167        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>    ADDRROOT           ADDRTYPE          ADDRSUFFIX          ADDRCITY        
#>  Length:167         Length:167         Length:167         Length:167        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>   ADDRZIPCOD             SPED        STATUS             NODEID         
#>  Length:167         Min.   : NA   Length:167         Length:167        
#>  Class :character   1st Qu.: NA   Class :character   Class :character  
#>  Mode  :character   Median : NA   Mode  :character   Mode  :character  
#>                     Mean   :NaN                                        
#>                     3rd Qu.: NA                                        
#>                     Max.   : NA                                        
#>                     NA's   :167                                        
#>    CAPACITYTO         ESL             BOARDDIS2            PROJ_CAP     
#>  Min.   :   0.0   Length:167         Length:167         Min.   :   0.0  
#>  1st Qu.: 543.0   Class :character   Class :character   1st Qu.: 497.0  
#>  Median : 761.0   Mode  :character   Mode  :character   Median : 722.0  
#>  Mean   : 867.0                                         Mean   : 793.1  
#>  3rd Qu.: 992.5                                         3rd Qu.: 975.0  
#>  Max.   :2294.0                                         Max.   :2390.0  
#>  NA's   :20                                             NA's   :2       
#>     NOTES          
#>  Length:167        
#>  Class :character  
#>  Mode  :character  
#>                    
#>                    
#>                    
#>                    
#> Warning: GDAL Message 6: dataset /tmp/grass8-rsb-2581899/Rtmp054NGJ/file277d6b3b5bfa6f.gpkg does not support layer creation option ENCODING
#> Warning: GDAL Message 6: dataset /tmp/grass8-rsb-2581899/Rtmp054NGJ/file277d6b2ea1c224.gpkg does not support layer creation option ENCODING
#>  +----------------------------------------------------------------------------+
#>  | Name:            newsch                                                    |
#>  | Mapset:          RGRASS_EXAMPLES                                           |
#>  | Project:         nc_basic_spm_grass7                                       |
#>  | Database:        /home/rsb/topics/grassdata                                |
#>  | Title:                                                                     |
#>  | Map scale:       1:1                                                       |
#>  | Name of creator: rsb                                                       |
#>  | Organization:                                                              |
#>  | Source date:     Sat Nov  2 11:31:32 2024                                  |
#>  | Timestamp (first layer): none                                              |
#>  |----------------------------------------------------------------------------|
#>  | Map format:      native                                                    |
#>  |----------------------------------------------------------------------------|
#>  |   Type of map: vector (level: 2)                                           |
#>  |                                                                            |
#>  |   Number of points:       167             Number of centroids:  0          |
#>  |   Number of lines:        0               Number of boundaries: 0          |
#>  |   Number of areas:        0               Number of islands:    0          |
#>  |                                                                            |
#>  |   Map is 3D:              No                                               |
#>  |   Number of dblinks:      1                                                |
#>  |                                                                            |
#>  |   Projection: Lambert Conformal Conic                                      |
#>  |                                                                            |
#>  |               N:   248159.84441077    S:   203559.01136227                 |
#>  |               E:   671714.55110786    W:   619215.13388253                 |
#>  |                                                                            |
#>  |   Digitization threshold: 0                                                |
#>  |   Comment:                                                                 |
#>  |                                                                            |
#>  +----------------------------------------------------------------------------+
#> 
#>       cat             cat_           TAG             NAMESHORT        
#>  Min.   :  1.0   Min.   :  1.0   Length:167         Length:167        
#>  1st Qu.: 42.5   1st Qu.: 42.5   Class :character   Class :character  
#>  Median : 84.0   Median : 84.0   Mode  :character   Mode  :character  
#>  Mean   : 84.0   Mean   : 84.0                                        
#>  3rd Qu.:125.5   3rd Qu.:125.5                                        
#>  Max.   :167.0   Max.   :167.0                                        
#>                                                                       
#>    NAMELONG           CORECAPACI       MOBILEUNIT       MOBILECAPA  
#>  Length:167         Min.   :   0.0   Min.   : 0.000   Min.   :0.00  
#>  Class :character   1st Qu.: 498.5   1st Qu.: 0.000   1st Qu.:0.75  
#>  Mode  :character   Median : 586.0   Median : 6.000   Median :1.50  
#>                     Mean   : 763.7   Mean   : 7.318   Mean   :1.75  
#>                     3rd Qu.: 903.0   3rd Qu.:11.000   3rd Qu.:2.50  
#>                     Max.   :2294.0   Max.   :49.000   Max.   :4.00  
#>                     NA's   :23       NA's   :19       NA's   :163   
#>     GLEVEL            LOGRADE            HIGRADE            CALENDAR        
#>  Length:167         Length:167         Length:167         Length:167        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>    HASBASE            ISMAGNET            PHONE            ADDRNUMBER       
#>  Length:167         Length:167         Length:167         Length:167        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>   ADDRPREFIX          ADDRROOT           ADDRTYPE          ADDRSUFFIX       
#>  Length:167         Length:167         Length:167         Length:167        
#>  Class :character   Class :character   Class :character   Class :character  
#>  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
#>                                                                             
#>                                                                             
#>                                                                             
#>                                                                             
#>    ADDRCITY          ADDRZIPCOD             SPED        STATUS         
#>  Length:167         Length:167         Min.   : NA   Length:167        
#>  Class :character   Class :character   1st Qu.: NA   Class :character  
#>  Mode  :character   Mode  :character   Median : NA   Mode  :character  
#>                                        Mean   :NaN                     
#>                                        3rd Qu.: NA                     
#>                                        Max.   : NA                     
#>                                        NA's   :167                     
#>     NODEID            CAPACITYTO         ESL             BOARDDIS2        
#>  Length:167         Min.   :   0.0   Length:167         Length:167        
#>  Class :character   1st Qu.: 543.0   Class :character   Class :character  
#>  Mode  :character   Median : 761.0   Mode  :character   Mode  :character  
#>                     Mean   : 867.0                                        
#>                     3rd Qu.: 992.5                                        
#>                     Max.   :2294.0                                        
#>                     NA's   :20                                            
#>     PROJ_CAP         NOTES          
#>  Min.   :   0.0   Length:167        
#>  1st Qu.: 497.0   Class :character  
#>  Median : 722.0   Mode  :character  
#>  Mean   : 793.1                     
#>  3rd Qu.: 975.0                     
#>  Max.   :2390.0                     
#>  NA's   :2                          
#> [1] TRUE
#>      nodes     points      lines boundaries  centroids      areas    islands 
#>        266          0        355          0          0          0          0 
#> primitives      map3d 
#>        355          0 
#>       cat          MAJORRDS_      ROAD_NAME          MULTILANE        
#>  Min.   :  1.0   Min.   :  1.0   Length:355         Length:355        
#>  1st Qu.: 89.5   1st Qu.: 91.5   Class :character   Class :character  
#>  Median :178.0   Median :180.0   Mode  :character   Mode  :character  
#>  Mean   :178.0   Mean   :179.8                                        
#>  3rd Qu.:266.5   3rd Qu.:268.5                                        
#>  Max.   :355.0   Max.   :357.0                                        
#>     PROPYEAR         OBJECTID       SHAPE_LEN       
#>  Min.   :   0.0   Min.   :  1.0   Min.   :   20.36  
#>  1st Qu.:   0.0   1st Qu.: 89.5   1st Qu.:  763.32  
#>  Median :   0.0   Median :178.0   Median : 1601.23  
#>  Mean   : 192.7   Mean   :178.0   Mean   : 4934.15  
#>  3rd Qu.:   0.0   3rd Qu.:266.5   3rd Qu.: 9555.59  
#>  Max.   :2025.0   Max.   :355.0   Max.   :64177.26  

# not run: vect2neigh() currently writes 3 new data sources in the PERMANENT
# mapset, despite this mapset not being the active one.
if (FALSE) {
  cen_neig <- vect2neigh("census")
  str(cen_neig)
}

# Cleanup the previously created datasets
if (run) {
  execGRASS(
    "g.remove",
    flags = "f",
    name = c("newsch", "newsch1"),
    type = "vector"
  )
  execGRASS("g.mapset", mapset = previous_mapset)
  if (example_mapset != previous_mapset) {
    unlink(file.path(location_path, example_mapset), recursive = TRUE)
  }
}

# Restore environment variable settings
Sys.setenv("GRASS_VERBOSE" = GV)
set.ignore.stderrOption(ois)
#> [1] TRUE