R - переходная функция для моделирования течения поверхностных вод с gрасстоянием

Я пытаюсь смоделировать наземный (поверхностный) поток воды от указанных точек происхождения до одной целевой точки вниз по склону, используя функцию gdistance shortestPath. Мне нужна помощь с определением подходящего transitionFunction для этого, так как мне нужно убедиться, что путь с наименьшими затратами позволяет воде течь только по пути к ячейкам высоты, равному или меньшему значению, чем предыдущая ячейка. transitionFunction в приведенном ниже примере выбирает ячейку с минимальной отметкой, но, основываясь на transitionFunction, который я определил, это значение все еще может быть больше, чем предыдущее значение ячейки.

Я понимаю, что, когда вышеизложенное определено так, как я этого хочу, путь может закончиться до достижения целевой точки. Это нормально, хотя в идеале я хотел бы иметь возможность сохранить путь от источника до места, где он заканчивается, если это возможно.

Кроме того, если кто-нибудь знает о другом пакете R, способном моделировать такие вещи, сообщите мне.

library(gdistance)
library(raster)
library(elevatr)
library(sp)

#load example DEM raster
data(lake)
elevation <- get_elev_raster(lake, z = 9)
#remove negative elevation values from raster
elevation[elevation < 0] <- NA

#create origin and goal points with same projection as elevation raster
origin <- SpatialPoints(cbind(1790000, 640000), proj4string = CRS("+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0"))
goal <- SpatialPoints(cbind(1820000, 540000), proj4string = CRS("+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0"))

#create df data and convert to SpatialPointsDataFrame
odf <- data.frame("flowreg" = 1)
gdf <- data.frame("flowreg" = 2)
origindf <- SpatialPointsDataFrame(origin, odf)
goaldf <- SpatialPointsDataFrame(goal, gdf)
trCost1 <- transition(elevation, transitionFunction=function(x) 1/min(x), directions=8)
trCost1gc <- geoCorrection(trCost1, type="c")

plot(raster(trCost1))   
sPath1 <- shortestPath(trCost1, origin, goal, 
output="SpatialLines")

plot(elevation)
plot(origindf, add = TRUE, col='red', cex = 5)
plot(goaldf, add = TRUE, col='green', cex = 5)
lines(sPath1)

результирующий ‹code›shortestPath‹/code› вывод


person Dorothy    schedule 29.11.2018    source источник
comment
Ваш текущий код не сохраняет путь от источника до того места, где он заканчивается? Я не могу сказать по вашей фигуре.   -  person jsta    schedule 06.12.2018
comment
Текущий код сохраняет путь, да. Проблема в том, что функция transitionFunction позволяет пути проходить «в гору» (т. е. к ячейкам, расположенным выше, чем к центральной ячейке). Я хочу, чтобы дорожка текла так, как поверхностные воды текут вниз по склону. Дайте мне знать, если у вас есть какие-либо мысли.   -  person Dorothy    schedule 06.12.2018


Ответы (1)


Я нашел функцию r.drain GRASS GIS (доступ к которой осуществляется с помощью rgrass7) ИЛИ raster::flowPath достиг того, что я пытаюсь сделать в приведенном выше вопросе.

person Dorothy    schedule 16.12.2018