1

最小コスト分析のためにパッケージ gdistance を使用しています。アイデアは、定義されたコスト値を持つコスト グリッド (ラスター) を介して、宛先ポイントからソースへのパスを決定することです。これにより、パスはコストの高いピクセルを回避し、コスト値の低いピクセルを優先します。私のデータで機能するコードは次のとおりです。

Costpath<-shortestPath(CostTrans,Cherangfirstloc.utm[1,],Cherangfirstloc.utm[132,], output="SpatialLines")

これにより、コストグリッドをCostTrans構成し、Cherangfirstloc.utm[1,]Spatialpoints データフレーム (ソース) からの最初の場所/ポイントでありCherangfirstloc.utm[132,]、Spatialpoints データフレーム (宛先) からの最後の場所/ポイントです。出力は、両方の場所/ポイントを結ぶ線です。

ただし、複数の最小コスト パスを計算したいので、ソースはデータフレームのすべての行になり、宛先は変わりません。これは、次のソースがCherangfirstloc.utm[2,]、その後Cherangfirstloc.utm[3,]などになることを意味します。これは、for ループまたは関数で実行できると思いますsapply。残念ながら、私はこれを定式化する方法を知りません。

この反復プロセスを定式化する方法について何かヒントをいただけますか? この場で質問してもよろしいでしょうか。基本的に、データフレームを反復処理する方法を知りたいだけです。したがって、gdistance と最小コスト分析がどのように機能するかは重要ではありません。

サンプル データとして使用できるコードを次に示します。

library(gdistance)

r <- raster(nrows=6, ncols=7, xmn=0, xmx=7, ymn=0, ymx=6, crs="+proj=utm 
+units=m")

r[] <- c(2, 2, 1, 1, 5, 5, 5, #creates costgrid
 2, 2, 8, 8, 5, 2, 1,
 7, 1, 1, 8, 2, 2, 2,
 8, 7, 8, 8, 8, 8, 5,
 8, 8, 1, 1, 5, 3, 9,
 8, 1, 1, 2, 5, 3, 9)

T <- transition(r, function(x) 1/mean(x), 8) #creates transition layer of costgrid
T <- geoCorrection(T) #correction

c1 <- c(5.5,1.5) #first source point
c2 <- c(5.5,4) #second source point
c3 <- c(1.5,5.5) #destination

sPath2 <- shortestPath(T, c1, c3, output="SpatialLines") # creates the least cost path

残念ながら、反復できるように c1、c2、および c3 を Spatialpoints データフレームに含める方法がわかりませんでした。これがまだ役立つことを願っています。

そのあたりのヒントを教えていただければ幸いです。あなたの努力に感謝します!

4

1 に答える 1

2

shortestPathさまざまな引数で関数を呼び出したいだけの場合、最も簡単な解決策はfor、次のようなループを使用することです。私はこの種の分析に慣れていないため、結果をどうしたいのかわかりません.2つの解決策があります:

この例では、次のステップで忘れられるため、最短パスをすぐに使用します。

for(i in 1:nrow(Cherangfirstloc.utm)) {
  # Computation
  Costpath <- shortestPath(CostTrans, Cherangfirstloc.utm[i,], Cherangfirstloc.utm[132,], output="SpatialLines") 

  ### Here your instructions for a direct use of the result ###
}

この例では、すべてのパスがリストに格納されます (shortestPath関数はオブジェクトを返すように見えるため、より便利な格納方法です)。各結果はresults変数でアクセスできます。たとえばresults[[12]]、12 行目から始まるパスの場合です。

results = list()
for(i in 1:nrow(Cherangfirstloc.utm)) {
  # Computation, storage in a list element
  results[[i]] <- shortestPath(CostTrans, Cherangfirstloc.utm[i,], Cherangfirstloc.utm[132,], output="SpatialLines") 
}

### Here your instructions for a global use of the result ###
于 2011-11-15T10:18:52.840 に答える