使用st_centroid获取点集质心失败,如何返回单个质心点?
解决st_centroid返回单个点簇质心的问题
你遇到的问题是因为st_centroid默认会对输入的每个独立几何对象分别计算质心。你的df_sf是包含4个单独点的sf对象,所以它会返回每个点自身的质心(也就是原点点集)。要得到整个点簇的单个质心,需要先把所有点合并成一个单一的几何对象,再计算质心。
修改后的代码:
library(dplyr) library(sf) df <- read.table(header=TRUE, text= "site lat long site1 41.21 -115.11 site2 45.3 -112.31 site3 41.15 -115.15 site4 41.12 -115.19") df_sf <- st_as_sf(df, coords = c('long', 'lat')) # 合并所有点为一个MULTIPOINT对象,再计算质心 cluster_centroid <- df_sf %>% st_union() %>% st_centroid() # 查看结果 cluster_centroid
代码说明:
st_union(df_sf):将sf对象中的所有独立点几何合并为一个MULTIPOINT类型的几何对象,把多个点变成一个整体。st_centroid():此时对合并后的单一几何对象计算,就会返回整个点簇的质心点。
执行后你会得到一个单独的点,坐标为整个点集的算术平均中心(在未做投影的地理坐标系下,这是近似质心;如果需要更精确的地理质心,建议先投影到合适的平面坐标系)。
内容的提问来源于stack exchange,提问作者luciano
相关产品推荐
相关产品推荐

