[AniMov] Clipping area from home range estimate

Tim Clark mudiver1200 at yahoo.com
Wed Oct 7 20:49:59 CEST 2009

After getting a little help I was able to answer my own question.  The home range estimate for some reason gives a whole range of "levels" for each polygon/area.  I still don't understand why, but there are multiple 100 percent isopleth levels in the homerange.  Indexing by these levels allowed me to compute new gpc polygons and recalculate the area for the polygon.

The working function and example data are below.

Aloha,

Tim

cut.NNCH<-function (x=hr, GPC.poly=BigMountain, percent = rev(seq(10,100, by = 10)), id = NULL, k = NULL, r = NULL, a = NULL, ...)
{
if (!inherits(x, "NNCH"))
stop("x should be of class \"NNCH\"")
if (!require(sp))
stop("package sp required")
if (!require(gpclib))
stop("package gpclib required")

e <- NULL
percent <- rev(vectorize.parameter(percent))
homerange <- NNCH.select(x, k = k, a = a, r = r)
for (kk in names(homerange)) {                                    #Index of number of k,r, or a values
polys <- homerange[[kk]]\$polygons
level <- length(homerange[[kk]]\$polygons)
for (i in 1:level) {                                   #Index of number of percent values
NNCH.poly<-polys[[i]]                              #gpc polygon of indexed home range
cut.poly<-setdiff(NNCH.poly,GPC.poly)                     #Cuts land from homerange
homerange[[kk]]\$polygons[[i]]<-cut.poly            #Replaces homerange with cut homerange in class "gpc.poly"

ar<-area.poly(homerange[[kk]]\$polygons[[i]])       #Calculate area of gpc polygon     #Create data frame of isopleth levels and area
homerange[[kk]]\$area[[i,2]]<-ar
}
}
return(homerange)
}

#Example data
data(chamois)
xy <- chamois\$locs
hr <- NNCH(xy, k = c(12,14))
plot(hr)

BigLake <- cbind(c(865000,870000,870000,865000),c(2045000,2045000,2050000,2050000))
BigLake <- as(BigLake[chull(BigLake), ], "gpc.poly")

#Run function
new.range<-cut.NNCH(x=hr,GPC.poly=BigLake)
plot(new.range)

Tim Clark
Department of Zoology
University of Hawaii