首页 > 解决方案 > 提取多边形质心的坐标

问题描述

我想将所有多边形质心的纬度和经度添加到 SpatialPolygonsDataFrame 的数据框中。但是,由于我不确定在使用 gCentroid 时如何提取多边形 id,因此我不确定如何进行合并(请参阅下面的第 3 行代码)。有人能帮我解决这个问题吗?非常感谢!

library(tidyverse)
library(rgeos)
ETH <- getData("GADM", country = "ETH", level = 3) # example of SpatialPolygonsDataFrame
cent <- as.data.frame(gCentroid(ETH, byid=TRUE)) # extraction of the coordinates of the polygons' centroids
ETH@data <- ETH@data %>% left_join(cent, by=?) # Here, I am not sure how to add the coordinates of the polygons' centroids to the dataframe.

标签: rpolygonraster

解决方案


您可以使用id = 参数 ingCentroid为每个点选择 ID 标签。选择一个具有唯一条目的列ETH来填充它。这些被添加为行名,因此您可以使用tibble::rownames_to_column它们将它们转换为列。这允许左连接:

library(tidyverse)
library(rgeos)

ETH      <- getData("GADM", country = "ETH", level = 3) 
cent     <- as.data.frame(gCentroid(ETH, byid = TRUE, id = ETH@data$GID_3))
cent     <- tibble::rownames_to_column(cent, var = "GID_3")
ETH@data <- ETH@data %>% left_join(cent, by = "GID_3")

我们可以通过绘制结果来展示这一点,质心为红点:

plot(ETH)
points(ETH@data$x, ETH@data$y, col = "red")

在此处输入图像描述


推荐阅读