此函数计算轮廓与距轮廓底部指定深度处的直线的交点。它有点多余,因为它还需要 x 和 y 剖面值,理论上可以从profile
:
filler <- function(depth, profile, xprof, yprof, xdelta=100, ydelta=100){
d = -(max(yprof))+depth
xr = range(xprof)
yr = range(-yprof)
xdelta = 100
xc = xr[c(1,2,2,1,1)] + c(-xdelta, xdelta, xdelta, -xdelta, -xdelta)
yc = c(d, d, min(yr)-ydelta, min(yr)-ydelta, d)
water = st_polygon(list(cbind(xc,yc)))
st_intersection(profile, water)
}
所以在使用中:
> plot(poly)
> plot(filler(40, poly, x_profile, y_profile), add=TRUE, col="green")
> plot(filler(30, poly, x_profile, y_profile), add=TRUE, col="red")
> plot(filler(15, poly, x_profile, y_profile), add=TRUE, col="blue")
请注意,第一个绿色区域被不太深的区域稍微覆盖。另请注意蓝色区域是如何分为两部分的。你可以得到横截面st_area
,深度为零时面积为零:
> st_area(filler(20, poly, x_profile, y_profile))
[1] 2450.761
> st_area(filler(2, poly, x_profile, y_profile))
[1] 15.27778
> st_area(filler(0, poly, x_profile, y_profile))
[1] 0
不确定如果您超出个人资料顶部会发生什么......