2017-07-11 6 views
0

ラスタスタックに4つのラスタレイヤが含まれており、指定された値のすべてのセルを含むポリゴンを生成したい。特定のラスタ値を含むポリゴンを作成する

rasterパッケージを使用してサンプルデータセットを生成することができます。下記のラスタと同様に

library(raster) 
filename <- system.file("external/test.grd", package="raster") 
r <- raster(filename) 

は、私の実際のデータは、動物の生息地のマップに似ており、「良い」と「悪い」の領域の斑状分布を持っています。

enter image description here

より密接に、我々は次の3つの他のラスタに変化のビットを追加し、スタックを作ることができ、私の実際のデータをミラーリングします。

s <- stack(r, r+250, r-250, r+100) 

スタックsでの作業は、すべてのセルにすべてのスタック層未満300を囲むポリゴンを作成することは可能でしょうか?

私の最終目標は、結果として得られるポリゴンの面積(またはパーセント)の重なりを計算することです。

どのような提案(具体的または一般的な)をいただければ幸いです。

答えて

1

ラスタスタックを使用しているため、すべてのセルの面積が同じである必要があります。その場合、私は多角形を使う必要はないと思います。 (私はあなたの例のデータビットを調整することに注意してください。)

library(raster) 
filename <- system.file("external/test.grd", package="raster") 
r <- raster(filename) 
s <- stack(r, r + 50, r - 50, r + 100) 

# Create a new raster stack with results of a logical test 
s2 <- s < 300 

# Create a raster indicating which cells of the new stack 
# have values that are all TRUE 
r2 <- sum(s2) == length(unstack(s2)) 
# Multiply by the area of a single cell 
r3 <- r2 * area(r2)[1] 

# Sum the area for all raster values 
sum(values(r3), na.rm = TRUE) 
## 124800 

あなたはポリゴンとあなたのラスタが大きすぎるではありません使用したい場合は、かなり迅速でなければなりませんSpatialPolygonsDataFrameにスタックを変換します。同じ結果が得られる類似の方法は次のとおりです。

# Create a new raster stack with results of a logical test 
s2 <- s < 300 

# Convert to sp object 
spdf <- as(s2, "SpatialPolygonsDataFrame") 

# Index to the rows/features where the values in s2 were all TRUE 
spdf2 <- spdf[which(rowSums([email protected]) == length(unstack(s))), ] 

rgeos::gArea(spdf2) 
## 124800 
関連する問題