[AniMov] Clipping area from home range estimate

Tim Clark mudiver1200 at yahoo.com
Mon Oct 5 22:01:31 CEST 2009


Dear Adehabitat Gurus,

I am bringing up a subject I posed a few months ago because it keeps creating problems for me.  

http://lists.faunalia.it/pipermail/animov/2009-July/000441.html

I work on fish that swim into little bays and around points of land, and my home range calculations always include land area as part of the home range.  I have been using qGIS to remove the land area, but I am now trying to look at changes in home range size as sample size increases.  Easy to do normally, but not when I have to manually clip the land out.  I came up with an easy way to do it using setdiff() from the gpclib package.  I have detailed shapefiles of the land which I convert to gpc polygons, then use setdiff() to remove the land from the gpc polygons created by the home range fuctions.  While this works, I am trying to write a more general function that will replace the date from the original home range object with the clipped data so that it is compatible with other functions in Adehabitat.  I am currently working on the NNCH home range function since that is what I am using on my current project.  I am having a problem replacing the area in
 the NNCH object with the new area for the home range isopleths.  I think this is simply due to my lack of understanding of how lists work, and would appreciate your help.  The problem line that I think is needed is commented out(homerange[[kk]]$area[[i,]]<-area).  Below is the function and example data.  I have used the chamois dataset and created a gpc polygon called "BigLake" to represent an uninhabitable area for goats.

Thanks for your help and suggestions,

Tim
 


#Input NNCH homerange, a GPC Polygon of area to cut, and other stuff
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, id = id, k = k, a = a, r = r)
    for (kk in names(homerange)) {
        polys <- homerange[[kk]]$polygons

        for (i in 1:length(percent)) {
            isoIndex <- NNCH.iso.index(homerange[[kk]], percent[i])
            if (is.integer(isoIndex)) {
            NNCH.poly<-polys[[isoIndex]]
            cut.poly<-setdiff(NNCH.poly,GPC.poly)
            homerange[[kk]]$polygons[[isoIndex]]<-cut.poly

            ar<-area.poly(homerange[[kk]]$polygons[[isoIndex]])
            area<-data.frame(levels=names(polys)[isoIndex],area=ar)
            #homerange[[kk]]$area[[i,]]<-area

            }
         }
    }
            return(homerange)
}

#Example data
library(adehabitat)
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")
plot(BigLake,add=TRUE)

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




Tim Clark
Department of Zoology 
University of Hawaii


      


More information about the AniMov mailing list