Jean-Luc Dupouey
Jean-Luc Dupouey

Reputation: 451

as.polygons(SpatRaster, values=FALSE) seems to dissolve cells when it should not

Maybe there is something I do not understand. According to the help page, as.polygons() applied to a SpatRaster with the option values = FALSE should not dissolve cells. But:

library(terra)
# terra 1.5.21

r <- rast(ncols=2, nrows=2, vals=1)

as.polygons(r)   # correctly gives a dissolved 1x1 polygon:
# class       : SpatVector 
# geometry    : polygons 
# dimensions  : 1, 1  (geometries, attributes)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 
# names       : lyr.1
# type        : <int>
# values      :     1

as.polygons(r, values=FALSE)  # improperly (?) gives a dissolved 1x1 polygon:
# class       : SpatVector 
# geometry    : polygons 
# dimensions  : 1, 0  (geometries, attributes)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 

whereas it should give an undissolved polygon, such as the one obtained with dissolve=FALSE (but without the values):

as.polygons(r,dissolve=FALSE)
# class       : SpatVector 
# geometry    : polygons 
# dimensions  : 4, 1  (geometries, attributes)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84

Upvotes: 1

Views: 1085

Answers (1)

Robert Hijmans
Robert Hijmans

Reputation: 47491

As you noted, the documentation is incorrect. If you do not want the cells to be dissolved, you need to use dissolve=FALSE.

If you do not want to dissolve, and do not want the values, you can do

library(terra)
r <- rast(ncols=2, nrows=2, vals=1)

p <- as.polygons(r, dissolve=FALSE, values=FALSE)
# or
p <- as.polygons(rast(r))
p
# class       : SpatVector 
# geometry    : polygons 
# dimensions  : 4, 0  (geometries, attributes)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 

The latter works the way it does, despite the default dissolve=TRUE because there is nothing to dissolve with since rast(r) has no values. If you want the extent you can do

as.polygons(r, extent=TRUE)
# class       : SpatVector 
# geometry    : polygons 
# dimensions  : 1, 0  (geometries, attributes)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 

That is a (much more) efficient approach that is otherwise equivalent to dissolving (aggregating) all cells.

Upvotes: 1

Related Questions