rgeos包gDistance函数替代方案:sf/terra等包可用函数咨询
替代rgeos::gDistance的方案(sf/terra包)
使用sf包
sf是当前主流的空间数据处理包,可完全替代rgeos的相关功能。对应需求的实现代码如下:
# 将数据转换为sf对象 line_sf <- st_as_sf(l) points_sf <- st_as_sf(p) # 计算每个点到线的距离(对应原代码的byid=T逻辑) distances <- st_distance(points_sf, line_sf, by_element = TRUE) # 转换为数值类型并取最大值 max.dist <- max(as.numeric(distances))
说明:st_distance的by_element=TRUE参数会逐个计算每个点到线的距离,返回结果为带单位的向量,通过as.numeric()可转为纯数值方便后续计算。
使用terra包
terra是专注于栅格与矢量数据的高性能处理包,同样能轻松实现该需求:
# 将数据转换为terra的vect对象 line_vect <- vect(l) points_vect <- vect(p) # 计算每个点到线的距离 distances <- distance(points_vect, line_vect) # 取最大值 max.dist <- max(distances)
说明:terra的distance()函数默认会计算每个点到最近线要素的距离,直接返回数值向量,无需额外单位转换。
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

