[R-sig-Geo] Unexpected behaviour of "area" slot in sp Polygons

Robert J. Hijmans r.hijmans at gmail.com
Mon Jan 26 19:21:28 CET 2015


This is probably because you are not subtracting areas of holes? To
get areas for SpatialPolygons, use:

library(rgeos)
gArea(vdum)

and in this case for the RasterLayer, I would use

freq(rdum)

Robert


On Mon, Jan 26, 2015 at 7:19 AM, Gregory Duveiller <gduveiller at gmail.com> wrote:
> Dear All,
>
> I noticed something unusual when trying to get the areas of some polygons I
> extracted from a raster.
>
> In the script below, I generate a random raster with 4 classes, which I
> then turn to a "SpatialPolygonsDataFrame". I then try to calculate areas
> per class in two different ways.
>
> ########
>
> require(sp)
> require(raster)
> require(rgeos)
>
> nrows=100; ncols=100
>
> rdum<-raster(nrows=nrows,ncols=ncols,xmn=0,ymn=0,ymx=100,xmx=100)
> rdum[]<-round(runif(nrows*ncols,1,4))
>
> vdum <- rasterToPolygons(rdum,dissolve=T)
>
> # calculate areas
> df <- data.frame(cls=1:4)
> for(i in 1:4){
>   ddd <- sapply(vdum at polygons[[i]]@Polygons, function(x) x at area)
>   df$area1[i] <- sum(ddd)
>   df$area2[i] <- sum(as.vector(rdum==i))
> }
> #########
>
> When I try to calculate the area per class from the attributes of the
> Polygons, I do not always get the same number as when I simply count the
> number of pixels of each class in the raster. In one iteration, for
> example, I get the following number in which the areas in the Polygons is
> higher by 52 units:
>
>> df
>   cls area1 area2
> 1   1  1670  1670
> 2   2  3384  3352
> 3   3  3355  3335
> 4   4  1643  1643
>
> Is there a reason one would not expect these to be always equal?
>
> Thanks in advance...
>
> Gregory Duveiller
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list