2017-09-27 6 views
2

私は動物をアリーナで移動したときに追跡するためにビデオトラッキングソフトウェアを使用しました。データは、時間Z(フレーム番号)における動物の位置のX、Y座標(ピクセル単位)である。例のデータフレームは、次のようになります「探求アリーナの面積」パスの幅を定義してエリアを計算する

x <- c(1,2,3,4,4,4,4,3,2,1) 
y <- c(1,2,3,4,3,2,1,2,3,4) 
z <- 1:length(x) 
df <- data.frame(x, y, z) 

私は、動物の行動に興味とのメトリックを計算したいと思います私はこれについて最善の方法を確信していませんが、私の最初の考えは、ポイントから階段状のパスを作成し、ポリゴンを作成するパスにバッファ幅を定義し、最後に、ポリゴンの下の平面。視覚的に、私のようなものを想像することができます:

plot(x, y, type = "o", lwd = 20) 

enter image description here

を私はこれらのような空間データに経験していないんだけど、私は、私はこのパスをラスタライズでした「と思いますか」?残念ながらlwdコマンドは絶対的なものではないので、私の飛行機が展開されると、線幅はそれに合わせて縮尺されません。

GISソフトウェアではなくRを使用することをお勧めします。

さらに洗練されたソリューションがあると思われますか?

答えて

2

私は動物の道を勉強する専門家ではありませんが、これは素晴らしいアイデアだと思います。

私たちは、簡単な例から始めましょう、それがどのように動作するかを説明するためにR.

の空間データを分析するために、クラスやメソッドの次世代規格であるsfパッケージを、使用することができます。 c(0, 1)からc(1, 1)まで線を描きます。次に、距離が1のバッファを作成します。最後に、バッファ領域の面積を計算します。

# Create a buffer zone 
ls_buffer <- st_buffer(ls, dist = 1) 

# View ls_buffer 
plot(ls_buffer) 

enter image description here

# Calculate the area 
st_area(ls_buffer) 
[1] 5.140157 

enter image description here

library(sf) 

# Create a simple feature object based on df 
ps <- as.matrix(rbind(c(0, 1), c(1, 1))) 
ls <- st_linestring(ps) 
# View the line 
plot(ls) 

ラインとバッファゾーンがよさそうです。 st_area関数を使用して面積を計算することもできます。バッファーゾーンの形状は、幅が1で高さが2に等しい矩形、および半径が1である円に似ています。次のコードを使用して面積を計算することができます。結果は st_area関数から得られたものと似ています。

2 * 1 + 1 * 1 * pi 
[1] 5.141593 

ここで、上記のコードを変更することは簡単です。私はバッファの距離を0.1に設定しましたが、合理的なバッファの距離を決定する必要があります。

# Create example data frame 
x <- c(1,2,3,4,4,4,4,3,2,1) 
y <- c(1,2,3,4,3,2,1,2,3,4) 
z <- 1:length(x) 
df <- data.frame(x, y, z) 

# Create a simple feature object based on df 
ps <- as.matrix(df[, c("x", "y")]) 
ls <- st_linestring(ps) 
# View the line 
plot(ls) 

enter image description here

# Create a buffer zone 
ls_buffer <- st_buffer(ls, dist = 0.1) 

# View ls_buffer 
plot(ls_buffer) 

enter image description here

# Calculate the area 
st_area(ls_buffer) 
[1] 2.263725 

sfパッケージはかなり新しいですので、私はまだそれを学んでいますし、私にはわからない機能の多くは、おそらくありますまだ。詳細については、CRAN(https://cran.r-project.org/web/packages/sf/index.html)のこのパッケージウェブサイトをご覧ください。

1

このアプローチでは、R内でGIS技法が使用されていますが、これはかなり簡単で、レイアウトした3つの手順に従っていると思います。

library(sp) 
library(rgeos) 
library(dplyr) 

#Convert points to path (SpatialLines object)  
SOlines <- Line(coordinates(df[,1:2])) %>% list() %>% Lines(ID="test") %>% list() %>% SpatialLines() 
#Buffer the path into a polygon 
area <- rgeos::gBuffer(SOlines,width = .1, byid = T) 
#Calculate the area within the Polygon 
rgeos::gArea(area,byid=T) 
     test 
    2.262897 

(YCWの答えのように)sfパッケージには、ライン・パスを作成するための、より簡単な方法があります。 SpatialLinesのアプローチを使用することの良い点の1つは、複数の行(ID)を1つのオブジェクトに格納してから、1回の呼び出しですべての領域を計算できることです。 gArea

関連する問題