[R-sig-Geo] calculate the area of an alpha shape

Ashton Shortridge ashton at msu.edu
Mon Nov 4 19:27:36 CET 2013


Dear André,

You're right! I assumed something that wasn't true - that $x in the ashape.obj 
were the points on the hull. That's what you get for free help, I guess.... 

Fortunately this seems to work. Notice how I index $x by the alpha.extremes 
field to extract just the points I want for bds:

library(sp)
bds <- achull.obj$ashape.obj$x[achull.obj$ashape.obj$alpha.extremes,] 
bds <- rbind(bds, bds[1,])          # close the ring
ashape <- Polygon(bds)            # convert to sp Polygon  
print(ashape at area)

# The following plots the points in ashape superimposed on the hulls
plot(achull.obj, col = "blue")
plot(achull.obj$ashape.obj, add = TRUE, col = "red")
points(coordinates(ashape), pch=16, cex=2, col='gold')


On Monday, November 04, 2013 04:32:42 PM Proosdij, Andre van wrote:
> Many thanks Ashton!
> 
> It does help a lot, but I'm afraid, it's not completely correct yet. One
> would expect that the area of the alpha shape is larger than the area of
> the alpha-convex hull (straight line segments instead of arcs). However,
> applying your suggestion, the area is smaller! If I plot the points and the
> alpha shape, the plot is correct. The area of the alpha shape seems to be
> calculated a polygon that includes the point (1.5, 2.0). See the updated
> example below. I don't know what happens, but apparently, the list of
> points that defines the polygon is incorrect. Any thoughts of how to adjust
> this?
> 
> Best,
> 
> André
> 
> 
> x <- c(1,1,1.5,2.8,3,3) # original set of points
> y <- c(1,3,2,3,4,1) # original set of points
> #x <- c(1,1,2.8,3,3) # points without (1.5, 2.0)
> #y <- c(1,3,3,4,1) # points without (1.5, 2.0)
> z <- cbind(x,y)
> plot(z)
> 
> ### Calculate the alpha convex hull
> library(alphahull)
> alpha <- 3 # Define alpha > 0
> achull.obj <- ahull(z, alpha = alpha)
> 
> ### Plot the sampled points and the alpha-convex hull object
> plot(achull.obj, add = TRUE, col = "blue")
> 
> ### Get the length of the alpha-convex hull
> achulllength <- achull.obj$length
> achulllength
> 
> ### Get the area of the alpha-convex hull
> achullarea <- areaahull(achull.obj)
> achullarea
> 
> ### Plot the alpha shape
> plot(achull.obj$ashape.obj, add = TRUE, col = "red")
> 
> ### Get the length of the alpha shape
> ashapelength <- achull.obj$ashape.obj$length
> ashapelength
> 
> ### Get the area of the alpha shape
> library(sp)
> bds <- achull.obj$ashape.obj$x  # matrix of coordinates in ashape
> bds <- rbind(bds, bds[1,]) # close the ring
> ashape <- Polygon(bds) # convert to sp Polygon
> ashapearea <- ashape at area
> ashapearea
> 
> 
> 
> 
> Ir. A.S.J. van Proosdij
> PhD Student
> t   +31 317 48 1198 
> e  andre.vanproosdij at wur.nl
> 
> Naturalis Biodiversity Center, section NHN
> Biosystematics Group, Wageningen University
> Gen. Foulkesweg 37, 6703 BL Wageningen, the Netherlands
> 
> www.bis.wur.nl
> 
> -----Original Message-----
> From: Ashton Shortridge [mailto:ashton at msu.edu]
> Sent: maandag 4 november 2013 14:35
> To: r-sig-geo at r-project.org
> Cc: Proosdij, Andre van
> Subject: Re: [R-sig-Geo] calculate the area of an alpha shape
> 
> Dear André,
> 
> There may be a more elegant solution, but this works fine:
> library(sp)
> bds <- achull.obj$ashape.obj$x  # matrix of coordinates in ashape
> bds <- rbind(bds, bds[1,])          # close the ring
> ashape <- Polygon(bds)            # convert to sp Polygon
> print(ashape at area)
> 
> On Monday, November 04, 2013 11:58:26 AM Proosdij, Andre van wrote:
> > Dear colleagues,
> > 
> > I wish to calculate the area covered by the alpha shape based on a
> > sample of points in a 2D plane. For the alpha-convex hull this works
> > fine using the function ahull in the alphahull package. However, I
> > want to get the area of the slightly different alpha shape. How can I
> > do this? Below a short example.
> > 
> > Many thanks in advance for your answers and ideas!
> > 
> > 
> > André

-----
Ashton Shortridge
Associate Professor			ashton at msu.edu
Dept of Geography			http://www.msu.edu/~ashton
235 Geography Building		ph (517) 432-3561
Michigan State University		fx (517) 432-1671



More information about the R-sig-Geo mailing list