2016-01-24 10 views
5

空間線の周りのバッファ内で道路密度(km /km²)を計算する方法はありますか?道路はラスタ内のピクセル(1ピクセル=625m²)で表されます。だから私は道路ピクセルをポリラインに変換することを始めました。rasterToContour(package raster)です。次に、私はバッファ内(km単位)とバッファ領域内(km²単位)の合計行数を計算することを考えています。ここでラスタからバッファ内の線密度を計算する

r <- raster(rast_path) 
x <- rasterToContour(r) 

は再現例です。

## To create raster: 
library(raster) 
library(rgeos) 
r <- raster(ncols=90, nrows=50) 
values(r) <- sample(1:10, ncell(r), replace=TRUE) 

## Road raster 
r[r[] < 10] <- 0 
r[r[] >= 10] <- 1 
plot(r) 

## To create spatial lines 
line1 <- rbind(c(-125,0), c(0,60)) 
line2 <- rbind(c(0,60), c(40,5)) 
line3 <- rbind(c(40,5), c(15,-45)) 
line1_sp <- spLines(line1) 
line2_sp <- spLines(line2) 
line3_sp <- spLines(line3) 

## To create buffer around lines 
line2_buff <- gBuffer(line2_sp, width=20) 
plot(line2_sp,add=T) 
plot(line2_buff,add=T) 
+4

重複質問:http://gis.stackexchange.com/questions/177869/calculate-line-density-within-a-buffer-すべて一緒に、キロメートル^ 2のバッファの面積は次式で与えられます。 in-r – RobertH

答えて

5

道路の長さ(キロメートル)をバッファーエリア(平方キロメートル)で割ったものを探していますか?道路の長さを計算するには、rasterToContour()でメソッドを使用できますが、これはユーザーが指定した例では再現できません。

しかし、平方キロメートルでバッファの面積を計算するには、n <- length(extract(r, line2_buff))を実行して、バッファ内にnというピクセル数(それぞれ625m^2)を得ることができます。必要な換算係数は1km^2 = 1,000,000m^2です。

length(extract(r, line2_buff)) * 625/1000000 
+0

ありがとうございました。特に、関数 'rasterToContour()'は、道路の左側と右側にエッジがある道路エッジを与えるため、道路の長さ(キロメートル)を計算するのに問題があります。私は道路を通り抜ける(つまり、道路のピクセルの中心を通過する)線を持つことを望んでいます。 – Marine

+0

2で割るだけで、1つのエッジの長さを計算できませんか? – rsoren

+0

バッファ内の道路とバッファの端にある道路を区別する方法は?あるケースではそれを2で割る必要があり、もう1つではそれを分割することはできません。 –

4

あなたがラインとポリゴンの間の交差点を取得するために探している機能はgIntersection(このリンクhttp://robinlovelace.net/r/2014/07/29/clipping-with-r.htmlを参照)です。しかし、バッファーを横切る道路の境界線を合計すると、道路の長さの2倍(道路の左側+右側)がカウントされます。

問題は、ラスタを道路地図(線)に変換することは、ポリゴン(rasterToContourで得られるもの)に変換するほど簡単ではないということです。ポリゴンに変換しても、あなたが探している結果は得られません(前述)。したがって、手動で行うか、コード化に余分な時間を費やす必要があります(「スケルトン化ラスタ」を検索、たとえばIdentify a linear feature on a raster map and return a linear shape object using R)。

私は普通の方法はエリア単位(km2/km2)で作業することだと思うし、あなたはラスタフォーマットでそれをかなり簡単に行うことができます。あなたの解像度が十分であれば、後で(道路のエリア)/(道路の平均幅)/(バッファエリア)を実行して値をkm/km2に近づけることができます。

関連する問題