R의 공간 다각형 객체 목록을 병합


16

함수로 작성한 공간 버퍼 (30000 버퍼) 목록이 있습니다 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 

이 목록에서 모든 공간 버퍼를 병합하여 30000 버퍼 (또는 기능)가있는 모양 파일을 얻는 방법은 무엇입니까? (이 모양 파일은 함수 aggregate에 의해 공간 다각형을 집계 하는 함수에서 사용됩니다 .)

이 코드를 테스트했지만이 오류 메시지가 나타납니다.

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

3
? 와 함께 lapply사용 gBuffer하는 대신 버퍼를 작성해야하는 이유 는 byid = TRUE무엇입니까?
cengel

답변:


12

SpatialPolygons객체 목록이 제공 되면 다음은 원래 SpatialPolygons지형지 물당 하나의 지형지 물로 공간 다각형 데이터 프레임을 구성하는 방법 입니다.

샘플 데이터 : spl12 개 SpatialPolygons개체 의 목록입니다. 개체가 이와 동일한 결과를 제공하는지 확인하고 30,000 개를 실행하기 전에 작은 샘플을 테스트하십시오.

> length(spl)
[1] 12
> class(spl)
[1] "list"
> class(spl[[1]])
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

Spatial Polygons공간 폴리곤 데이터 프레임을 만들기 위해 모든 기능이 포함 된 단일 객체 를 생성하려고합니다 .

> joined = SpatialPolygons(lapply(spl, function(x){x@polygons[[1]]}))
> plot(joined)

이것은 polygons객체에서 첫 번째 슬롯을 가져 오고 (각 목록 요소는 현재 단일 기능이므로 하나만 있어야 함) SpatialPolygons다중 기능을 만들기 위해 공급하는 Polygons 객체 목록을 구성 합니다 SpatialPolygons. 이것을 플롯하면 모든 기능을 볼 수 있습니다. 다음으로로 저장하려면 shapefile일부 데이터를 추가해야합니다. 다른 것이 없으면 간단한 1-12 ID 열을 만듭니다.

> jdata = SpatialPolygonsDataFrame(Sr=joined, data=data.frame(i=1:12),FALSE)

FALSE플래그는 R가 일치하도록 공간 및 비 공간 데이터를 재 배열하려고 중지합니다. 버퍼 크기를 데이터 프레임 등에 넣을 수 있습니다.

작업이 완료되었습니다.



2

다각형에 고유 한 ID가없는 경우 rbind에서 makeUniqueIDs 인수를 사용할 수 있습니다.

 library(purrr)

list(buff.pts, makeUniqueIDs = T) %>% 
  flatten() %>% 
  do.call(rbind, .)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.