Я думаю, что проблема не в unionSpatialPolygons
, а в вашем сюжете. В частности, для каждого идентификатора вы создаете только первый «подполигон» . Выполните следующее, чтобы проверить, что пошло не так:
for(i in 1:length(names(usaUnion))){
print(length(usaUnion@polygons[[i]]@Polygons))
}
Для каждого из них вы взяли только первый.
Я получил правильное объединение / участок многоугольника со следующим кодом :
library(rgdal)
library(maptools)
library(plyr)
usa <- readOGR(dsn = "INSERT_YOUR_PATH", layer="light_shape")
# remove NAs
usa <- usa[!is.na(usa$segment_ID), ]
usaIDs <- usa$segment_ID
#get unique colors
set.seed(666)
unique_colors <- sample(grDevices::colors()[grep('gr(a|e)y|white', grDevices::colors(), invert = T)], 15)
colors <- plyr::mapvalues(
usaIDs,
from = as.numeric(sort(as.character(unique(usaIDs)))), #workaround to get correct color order
to = unique_colors
)
plot(usa, col = colors, main = "Original Map")
usaUnion <- unionSpatialPolygons(usa, usaIDs)
plot(usaUnion, col = unique_colors, main = "Joined Polygons")