Я пытаюсь повторить процесс создания центроидов списка из SpatialPolygonsDataFrames
(каждый с несколькими объектами многоугольника внутри), в результате чего SpatialPoints
сохраняет атрибуты (данные) родительских многоугольников. Я пробовал функцию sp::over
, но это кажется проблематичным, потому что центроиды не обязательно перекрываются с родительскими полигонами. Кроме того, я новичок в кодировании / R и не знаю, как этого добиться в цикле for
и / или с использованием функции apply
.
В частности, мне нужно (1) найти другую функцию, которая свяжет SpatialPolygonsDataFrames
с соответствующими SpatialPoints
(центроидами); и (2) выполнить итерацию по всему процессу и объединить данные SpatialPolygonsDataFrames
с соответствующими SpatialPoints
- я не знаю, как сопоставить значение индекса одного списка со значением индекса в другом во время выполнения цикла.
Вот воспроизводимый пример для одного SpatialPolygonsDataFrames
объекта, показывающий, что использование sp::over
не работает, потому что некоторые центроиды не заканчиваются перекрывающимися родительскими полигонами:
library(maptools) ## For wrld_simpl
library(sp)
## Example SpatialPolygonsDataFrames (SPDF)
data(wrld_simpl) #polygon of world countries
spdf1 <- wrld_simpl[1:25,] #country subset 1
spdf2 <- wrld_simpl[26:36,] #subset 2
spdf3 <- wrld_simpl[36:50,] #subset 3
spdfl[[1]]@data
#plot, so you can see it
plot(spdf1)
plot(spdf2, add=TRUE, col=4)
plot(spdf3, add=TRUE, col=3)
#make list of SPDF objects
spdfl<-list()
spdfl[[1]]<-spdf1
spdfl[[2]]<-spdf2
spdfl[[2]]<-spdf3
#create polygon centroids for each polygon feature (country) within spdfl[[1]]
spdf1c <- gCentroid(spdfl[[1]], byid=TRUE)
plot(spdfl[[1]])
plot(spdf1c, add=TRUE)
#add attributes 'NAME' and 'AREA' to SpatialPoints (centroid) object from SPDF data
spdf.NAME <- over(spdf1c, spdfl[[1]][,"NAME"])
spdf.AREA <- over(spdf1c, spdfl[[1]][,"AREA"])
spdf1c$NAME <- spdf.NAME
spdf1c$AREA <- spdf.AREA
spdf1c@data
#`sp::over` output error = name and area for ATG, ASM, BHS, and SLB are missing