Я пытаюсь придерживаться sp
и rgeos
.
Если оба SpatialPolygonsDataFrames, как я понимаю, содержат одинаковые полигоны, которые вы можете сделать:
library(raster)
int <- intersect(sp1, sp2)
Он создает новые SpatialPolygonsDataFrames со столбцами данных из обоих входов, и, поскольку полигоны перекрываются, вы получите те же полигоны.
ОБНОВЛЕНИЕ: Если многоугольники не совпадают, возьмите центр тяжести одного SpatialPolygonsDataFrames и объедините его с другим.
centroids <- gCentroid(sp1, byid = T)
sp1_centroid <- SpatialPointsDataFrame(centroids, sp1@data)
centroiddata <- sp2 %over% sp1_centroid
sp12 <- spCbind(sp2, centroiddata)
Если полигоны имеют странные формы, но в целом все еще очень похожи, то можно сделать то же самое с gPointsOnSurface()
, вместо этого gCentroid()
может вычислять центроиды вне полигона. Если полигоны в обоих df очень различны, вероятно, следует рассчитать перекрытие, например, this и выбрать тот, у которого наибольшее перекрытие.