R - функция перехода для моделирования поверхностного водного потока с помощью gdistance - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь смоделировать поток наземной (поверхностной) воды из указанных исходных точек в одну целевую точку спуска, используя функцию 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)

imageshortestPath output">

1 Ответ

0 голосов
/ 16 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...