r - 光栅 R 包中 flowPath 返回的路径有问题
问题描述
raster 包中 flowPath 函数返回的路径由平行于 x 轴和 y 轴的线段组成。
从rasterVis 文档 ( https://oscarperpinan.github.io/rastervis/ ) 中的矢量场图示例开始,我尝试从表面上的起点找到流路径,但路径输出不正确。
library(raster)
library(rasterVis)
proj <- CRS('+proj=longlat +datum=WGS84')
df <- expand.grid(x = seq(-2, 2, .01), y = seq(-2, 2, .01))
df$z <- with(df, (3*x^2 + y)*exp(-x^2-y^2))
r <- rasterFromXYZ(df, crs=proj)
# Up to this point we follow the example in the rasterVis documentation
# Now attempt to find the path from a point on the surface
contour(r$z)
r.fd<-terrain(r,opt='flowdir')
r.c<-cellFromXY(r,cbind(-1,0))
r.p<-flowPath(r.fd,r.c)
p.xy<-xyFromCell(r.fd,r.p)
lines(p.xy,col='green')
正如您在上面看到的,流动路径通过向 +x 移动,然后向 -y 移动,在大约 (0,-.8) 处达到最小值。我一直无法构建一个不存在这个问题的数据集。但是:flowPath文档中包含的示例(在raster包中,使用火山数据)会产生人们可能期望的输出,并且不会出现此问题。
我做错了什么,无法扩展 rasterVis 文档中的示例?
附录:我质疑输出的原因可能更多是对flowPath应该返回什么的误解。我预计液滴在下坡时可能会遵循什么样的路径。像这样:
这是使用简单的最陡下降步行计算得出的。但是,如果(如受访者 Hijmans 所述)flowPath 按预期工作,那么我可能需要找到另一个函数来提供液滴沿着下坡移动的路径。
解决方案
为什么路径不正确?对我来说看起来不错。通过聚合和标记来说明。
library(raster)
proj <- CRS('+proj=longlat +datum=WGS84')
df <- expand.grid(x = seq(-2, 2, .01), y = seq(-2, 2, .01))
df$z <- with(df, (3*x^2 + y)*exp(-x^2-y^2))
r <- rasterFromXYZ(df, crs=proj)
r <- aggregate(r, 25) * 10
r.fd <- terrain(r, opt='flowdir')
r.p <- flowPath(r.fd, cbind(-1,0))
p.xy <- xyFromCell(r.fd,r.p)
plot(r)
lines(p.xy,col='green', lwd=2)
text(r)
添加一些噪音以获得更摆动的路径
set.seed(01234)
r <- rasterFromXYZ(df, crs=proj)
r <- aggregate(r, 10) * 10
r <- r + runif(ncell(r), 1, 2)
r.fd <- terrain(r, opt='flowdir')
r.p <- flowPath(r.fd, cbind(-1,0))
p.xy <- xyFromCell(r.fd,r.p)
plot(r)
lines(p.xy,col='green', lwd=2)
推荐阅读
- java - 高级json字符串到java对象的处理和转换
- java - 有没有办法在测试中选择性地禁用对实体修改的审计?
- python - 如何以特定顺序依次运行包含测试套件的不同脚本文件
- hibernate-search - 从独立索引中删除,不会反映将已删除实体用作@IndexedEmbedded 的索引
- junit - 如何使用 Junit 测试套件仅重新运行失败的测试用例
- javascript - 如何从网页中获取文件目录
- amazon-web-services - 发电机数据库上的分区键
- php - 解码 Cookies 值并将数据保存在数据库中
- python - 如何为 python 配置 Google Cloud Platform Data Loss Prevention 客户端库以在 SSL 代理后面工作?
- node.js - 如何在 addFields 聚合中使用正则表达式与 mongodb