[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