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
相关产品推荐
相关产品推荐

