我正在尝试使用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)
答案 0 :(得分:0)
我发现GRASS GIS(使用rgrass7
在R中访问)的r.drain函数或raster::flowPath
实现了我在上述问题中想要做的事情。