2017-08-23 10 views
0

rgeosパッケージのgArea、gUnion、gIntersectionの組み合わせを使用して、重なり合うポリゴンの領域を取得しようとしています。SpatialPolygonsDataFrameをループする

この質問では、私は多面体となる家庭の範囲を作成するためにadehabitatLTによって提供される動物の場所を使用しています。

私は

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) 

完成の操作をする形式にデータを操作

library(adehabitatHR) 
library(rgeos) 
data(puechabonsp) 

- データは、現在以下のコード

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([email protected]$id) #list of unique animal ids 

をspatialpointsdataframeされ、私がこだわっているところです。動物IDの可能な組み合わせごとに重複領域を取得しようとしています。

test <- lapply(combn(uniqueID, 2), 2, 
       function(x) { 
       SIcomb <- gArea(gIntersection([email protected]$id[ x[1] ], 
       [email protected]$id[ x[2] ]))/ 
       gArea(gUnion([email protected]$id[ x[1] ], [email protected]$id[ x[2] 
])) 
      } )  

私はlapplyを正しく実行していないと思われますが、それを把握することはできません。ヒントは非常に高く評価されます!

答えて

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 
+0

完璧に機能しました!ありがとうございました。 IDの組み合わせを出力に追加するコードを少し変更して、各2エリアの動物を比較した2つの動物を知っていますか? – ecologist55

+0

私は各ID-IDの組み合わせのために、 – ecologist55

+0

stats [x] < - paste(gArea(gUnion(sp1、sp2))、sp1 @ data $ id、sp2 @ data $ id、sep = " - ") – ecologist55

関連する問題