Tengo una lista de buffers espaciales (30000 buffers) que construí con la función lapply
:
buff.pts <- lapply(1:nrow(pts.prj), FUN=function(l){
buff <- gBuffer(pts.prj[l,], width=1000) ## 1km
return(buff)
}))
> head(buff.pts)
[[1]]
class : SpatialPolygons
features : 1
extent : 307941.8, 311941.8, 4994518, 4998518 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0
[[2]]
class : SpatialPolygons
features : 1
extent : 307226, 311226, 4991153, 4995153 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0
De esta lista, ¿cómo puedo fusionar todos los búferes espaciales para obtener un shapefile con los 30000 búferes (o características)? (Este archivo de forma se utilizará en la función aggregate
para agregar polígonos espaciales por atributos).
Probé este código pero obtengo este mensaje de error:
test <- as.data.frame(do.call("rbind", buff.pts))
Error in as.data.frame(do.call("rbind", buff.pts)) :
error in evaluating the argument 'x' in selecting a method for function 'as.data.frame': Error in validObject(res) :
invalid class “SpatialPolygons” object: non-unique Polygons ID slot values
lapply
lugar de usargBuffer
conbyid = TRUE
?Respuestas:
Dada una lista de
SpatialPolygons
objetos, a continuación se explica cómo construir un marco de datos de polígonos espaciales con una característica porSpatialPolygons
característica original .Datos de muestra:
spl
es una lista de 12SpatialPolygons
objetos; asegúrese de que su objeto dé los mismos resultados que este y pruebe en una muestra pequeña antes de ejecutar en 30,000:Desea crear un solo
Spatial Polygons
objeto con todas las características para crear un Marco de datos de polígonos espaciales:Esto toma la primera
polygons
ranura del objeto (y debe haber solo uno, ya que cada elemento de la lista es actualmente una sola característica) y luego construye una lista de objetos de Polígonos que es lo que alimentaSpatialPolygons
para hacer una función múltipleSpatialPolygons
. Trace esto, y debería ver todas sus características. A continuación, si desea guardar comoshapefile
, debe agregar algunos datos. En ausencia de cualquier otra cosa, creo una columna de identificación simple de 1 a 12:La
FALSE
bandera simplemente detiene a R tratando de reorganizar los datos espaciales y no espaciales para que coincidan. Es posible que desee colocar los tamaños de búfer en el marco de datos o algo así.Trabajo hecho.
fuente
Para fusionar una lista de objetos espaciales, puede hacer:
fuente
Puede usar el argumento makeUniqueIDs en rbind si sus polígonos no tienen ID únicos.
fuente