Пути, возвращаемые функцией 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')
Путь потока из точки (-1,0), изображающий нежелательное поведение.
Как вы можете видеть выше, путь потока продолжается до минимума примерно в (0, -. 8), перемещаясь в направлении + x, а затем -y. Я не смог построить набор данных, который не имеет этой проблемы. Однако: пример, включенный в документацию flowPath (в пакете растр с использованием данных volcano ), дает ожидаемый результат и не демонстрирует эту проблему.
Что я делаю неправильно, что не могу расширить пример в документации rasterVis?
Добавление: моя причина для сомнений в выводе может заключаться в неправильном понимании того, что flowPath должен вернуться. Я ожидал, что путь, по которому может идти капля при движении вниз по склону. Например:
Ожидаемый flowPath
Это было вычислено с использованием простого обхода с самым крутым спуском. Однако, если (как заявил респондент Хиджманс) flowPath работает, как и предполагалось, тогда мне может понадобиться найти другую функцию, которая обеспечит, чтобы капли пути следовали за движением вниз.