Mam listę buforów przestrzennych (30000 buforów), które zbudowałem z funkcją 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
Jak z tej listy mogę połączyć wszystkie bufory przestrzenne, aby uzyskać plik kształtu z 30000 buforami (lub funkcjami)? (Ten plik kształtu zostanie następnie użyty w funkcji aggregate
do agregacji wielokątów przestrzennych według atrybutów).
Przetestowałem ten kod, ale otrzymuję ten komunikat o błędzie:
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
zamiast używaćgBuffer
z nimibyid = TRUE
?Odpowiedzi:
Biorąc pod uwagę listę
SpatialPolygons
obiektów, oto jak zbudować ramkę danych wielokątów przestrzennych z jedną operacją na oryginalnąSpatialPolygons
operację.Przykładowe dane:
spl
to lista 12SpatialPolygons
obiektów - upewnij się, że Twój obiekt daje takie same wyniki, jak to, i przetestuj na małej próbce przed uruchomieniem na 30 000:Chcesz utworzyć pojedynczy
Spatial Polygons
obiekt ze wszystkimi jego funkcjami, aby następnie utworzyć ramkę danych wielokątów przestrzennych:To bierze pierwszą
polygons
szczelinę z obiektu (i powinien być tylko jeden, ponieważ każdy element listy jest obecnie pojedynczą cechą), a następnie konstruuje listę obiektów wielokątów, które są tym, czym karmisz,SpatialPolygons
aby utworzyć funkcję wielofunkcyjnąSpatialPolygons
. Wykreśl to, a powinieneś zobaczyć wszystkie swoje funkcje. Następnie, jeśli chcesz zapisać jakoshapefile
, musisz dodać trochę danych. W przypadku braku czegokolwiek innego tworzę prostą kolumnę identyfikatora od 1 do 12:FALSE
Flag po prostu przestaje R próbuje zmienić dane przestrzenne i non-przestrzennych, aby dopasować się. Możesz chcieć umieścić rozmiary buforów w ramce danych lub coś takiego.Zadanie wykonane.
źródło
Aby scalić listę obiektów przestrzennych, możesz:
źródło
Możesz użyć argumentu makeUniqueIDs w rbind, jeśli twoje wielokąty nie mają unikalnych identyfikatorów.
źródło