Я использую пакет gdistance для анализа наименьших затрат.Идея состоит в том, чтобы определить путь от точки назначения к источнику через сетку затрат (растр) с определенными значениями стоимости;путь, таким образом, избегает пикселей с высокой стоимостью и предпочитает пиксели с низкой стоимостью.Код, который работает для меня с моими данными:
Costpath<-shortestPath(CostTrans,Cherangfirstloc.utm[1,],Cherangfirstloc.utm[132,], output="SpatialLines")
Таким образом, CostTrans
составляет сетку затрат, Cherangfirstloc.utm[1,]
- это первое местоположение / точка из фрейма данных Spatialpoints (источник), а Cherangfirstloc.utm[132,]
- этопоследнее местоположение / точка из кадра данных пространственных точек (пункт назначения).Выходными данными является линия, соединяющая оба местоположения / точки.
Однако теперь я хочу вычислить несколько путей наименьшей стоимости , поэтому источником должен быть каждая строка датафрейм, пункт назначения остается прежним.Это означает, что следующим источником будет 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, чтобы можно было выполнить итерацию.Надеюсь, что это все еще помогает.
Буду признателен, если вы дадите мне какие-нибудь намеки на это.Спасибо за ваши старания!