我试图通过在rgeos包中使用gArea,gUnion和gIntersection的组合来获得重叠多边形的区域。
对于这个问题,我使用adehabitatLT提供的动物位置来创建将成为多边形的家庭范围。
library(adehabitatHR)
library(rgeos)
data(puechabonsp)
以我想要的格式处理数据
locs <- puechabonsp$relocs
locs <- as.data.frame(locs)
da <- as.character(locs$Date)
da <- as.POSIXct(strptime(as.character(locs$Date),"%y%m%d"))
puech <- as.ltraj(xy = locs[,c("X","Y")], date = da, id = locs$Name)
puech2<-ld(puech)
完成操作 - 数据现在是spatialpointsdataframe
pigsp<-SpatialPointsDataFrame(coords=cbind(puech2$x,puech2$x),
data=data.frame(puech2$id),proj4string = CRS("+proj=utm +zone=14"))
pigkern<-kernelUD(pigsp) #kernel homeranges
pigvert<-getverticeshr(pigkern,95) #vertice of home ranges (the polygons)
proj4string(pigvert)<-CRS("+proj=utm +zone=14") #add projection
uniqueID<-unique(pigvert@data$id) #list of unique animal ids
以下代码是我被困的地方。我试图为每种可能的动物ID组合获得重叠区域。
test <- lapply( combn( uniqueID, 2 ), 2,
function(x) {
SIcomb <- gArea(gIntersection(pigvert@data$id[ x[1] ],
pigvert@data$id[ x[2] ]))/
gArea(gUnion(pigvert@data$id[ x[1] ], pigvert@data$id[ x[2]
]))
} )
我怀疑我没有正确地做出来,但无法弄明白。提示将不胜感激!
答案 0 :(得分:0)
我认为您没有将sp
对象传递给gUnion()
,这是造成问题的原因。我能够根据唯一名称使用for()
循环和原始数据的子集:
> uniqueID_combn <- combn(uniqueID, 2)
> for(x in 1:(length(uniqueID_combn)/2)){
+ sp1 <- subset(pigvert, id == uniqueID_combn[1, x])
+ sp2 <- subset(pigvert, id == uniqueID_combn[2, x])
+ print(gArea(gUnion(sp1, sp2)))
+ }
[1] 3337444
[1] 3793138
[1] 3319134
[1] 2462282
[1] 1162276
[1] 2462282