r - 在许多线段上加速 st_buffer

标签 r r-sf

我在有许多小线段的道路网络周围进行缓冲,这需要很长时间。当我尝试使用探查器查看是什么原因导致花费如此长的时间时,大部分时间都被“.Call”占用。所以我想知道 .Call 部分发生了什么,我可以做些什么来加快这个过程?

这是一个可重现的示例:

library(sf)
my_linestring_sfc <- st_sfc(
  st_linestring(matrix(c(-10, -10, -1, -1, 0, 0), ncol = 2, byrow = TRUE)), 
  st_linestring(matrix(c(10, -10, 1, -1, 0, 0), ncol = 2, byrow = TRUE)), 
  st_linestring(matrix(c(0, 0, 0, 1, 0, 10), ncol = 2, byrow = TRUE))
)

line_lst <- map(1:10000 *5, ~my_linestring_sfc + .x)

lins <- do.call(c, line_lst)

profvis::profvis({st_buffer(lins, 100)})

火焰图对我来说是什么样子的: flamegraph

最佳答案

请注意,.Call 指的是 st_buffer 内的内部调用。它可能调用 c 库或其他优化的编译代码。您不太可能轻松地加快速度。简化线路可能是一种加快速度而又几乎不会降低结果质量的方法,这可以通过 st_simplify 来完成。

如果你查看sf:::st_buffer.sfc的代码,你会看到它调用:sf:::CPL_geos_op,它本身是基本上是调用内部编译函数的包装器。

关于r - 在许多线段上加速 st_buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69438335/

相关文章:

r - 来自共享公共(public)属性(唯一且一对一)的两个 sf 对象的相交多边形

r - 将多边形列表组合成单个对象

r - 将 sf 表中的不同点投影到不同的 UTM 投影中(使用 R)?

r - 是否需要使用facet_grid/wrap来按除用于填充/颜色之外的变量对箱线图进行分组?

r - 如何在 VS code 中安装 R 包

r - 向量中不同元素之间的元素数计数

r - Markdown R : Using highcharter to plot in a loop

r - 如何在 ggplot 中为 map 中的多个图层自定义图例?

R:在可行的情况下进行快速(有条件)子集化

r - 定位等值带/等时线内的点