You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中sf::st_buffer与terra::buffer的差异:直径与半径参数区别

你对两个缓冲区函数的参数理解不正确。sf::st_buffer的dist参数和terra::buffer的width参数,传入的均为缓冲区的半径值,不存在一个传半径一个传直径的差异。

你之前查阅的文档链接存在指向错误,两个链接分别对应stats包的dist函数、terra包的独立width函数,并非两个缓冲区方法的参数说明,这可能是你产生误解的原因。

你可以通过以下简单代码验证参数逻辑:

# 加载依赖包
library(sf)
library(terra)

# 创建CGCS2000 / 3-degree Gauss-Kruger CM 108E平面坐标系下的测试点(单位:米)
test_pt_sf <- st_sfc(st_point(c(432000, 3360000)), crs = 4549)
test_pt_terra <- vect(test_pt_sf)

# 分别用两个函数做参数为100的缓冲区
buf_sf <- st_buffer(test_pt_sf, dist = 100)
buf_terra <- buffer(test_pt_terra, width = 100)

# 输出缓冲区面积对比
st_area(buf_sf) 
expanse(buf_terra)

运行后两个缓冲区的面积均约为31415.93平方米,完全符合圆面积公式π*r²中r=100的计算结果,可证明两个参数均为半径。

如果需要处理WGS84等地理坐标系下的缓冲区,建议先将要素投影到对应区域的平面坐标系再做运算,避免度单位带来的距离误差。

内容的提问来源于stack exchange,提问作者CMai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:04