J'ai une liste de tampons spatiaux (30000 tampons) que j'ai construits avec la fonction 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
À partir de cette liste, comment puis-je fusionner tous les tampons spatiaux pour obtenir un fichier de formes avec les 30000 tampons (ou fonctionnalités)? (Ce fichier de formes sera ensuite utilisé dans la fonction aggregate
pour agréger les polygones spatiaux par attributs.)
J'ai testé ce code mais j'obtiens ce message d'erreur:
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
au lieu d'utilisergBuffer
avecbyid = TRUE
?Réponses:
Étant donné une liste d'
SpatialPolygons
objets, voici comment construire un bloc de données de polygones spatiaux avec une entité parSpatialPolygons
entité d' origine .Exemples de données:
spl
est une liste de 12SpatialPolygons
objets - assurez-vous que votre objet donne les mêmes résultats que celui-ci, et testez sur un petit échantillon avant de lancer 30 000:Vous souhaitez créer un seul
Spatial Polygons
objet avec toutes les fonctionnalités qu'il contient afin de créer ensuite un cadre de données de polygones spatiaux:Cela prend le premier
polygons
emplacement de l'objet (et il ne devrait y en avoir qu'un, car chaque élément de la liste est actuellement une seule entité), puis construit une liste d'objets Polygones qui est ce que vous alimentezSpatialPolygons
pour créer une multifonctionSpatialPolygons
. Tracez cela, et vous devriez voir toutes vos fonctionnalités. Ensuite, si vous souhaitez enregistrer en tant queshapefile
, vous devez ajouter des données. En l'absence d'autre chose, je crée une simple colonne ID de 1 à 12:Le
FALSE
drapeau arrête juste R essayant de réorganiser les données spatiales et non spatiales pour correspondre. Vous voudrez peut-être mettre les tailles de tampon dans la trame de données ou quelque chose.Travail accompli.
la source
Pour fusionner une liste d'objets spatiaux, vous pouvez faire:
la source
Vous pouvez utiliser l'argument makeUniqueIDs dans rbind si vos polygones n'ont pas d'ID uniques.
la source