如何获取多边形坐标的均值点并添加至projects数据框?
解决st_centroid()报错的问题
你遇到的错误是因为多边形几何存在无效性(比如重复顶点、自相交这类Shapefile常见问题),按以下步骤就能解决:
1. 修复无效几何
用st_make_valid()自动处理几何对象的无效问题:
projects <- st_make_valid(projects)
2. 重新计算质心
修复后再调用st_centroid()即可,也可以用st_point_on_surface()(适合质心不在多边形内部的场景):
# 计算质心并添加到数据框 projects$centroid <- st_centroid(projects$geometry) # 提取质心的经纬度到单独列 projects$lon <- st_coordinates(projects$centroid)[, 1] projects$lat <- st_coordinates(projects$centroid)[, 2]
备选方法:直接计算顶点坐标均值
如果不想处理几何有效性,也可以从st_coordinates()的结果中按多边形分组计算均值:
# 将坐标转成数据框并分组计算均值 coord_df <- as.data.frame(st_coordinates(projects)) mean_coords <- coord_df %>% group_by(L1) %>% summarise(mean_lon = mean(X), mean_lat = mean(Y)) # 将均值合并回原数据框 projects <- projects %>% mutate(L1 = row_number()) %>% left_join(mean_coords, by = "L1")
注意:顶点坐标均值和几何质心的结果会有细微差别,前者是所有顶点的算术平均,后者是几何意义上的中心,按需选择即可。
内容的提问来源于stack exchange,提问作者Nader Mehri
相关产品推荐
相关产品推荐

