R을 사용하여 공간 다각형 객체를 데이터 프레임으로 변환


18

내 목표는 특정 다각형을 병합하여 기존 모양 파일을 수정하는 것입니다.

shapefile을 가져오고 UnionSpatialPolygons 명령을 사용한 후 원하는 다각형 외곽선을 얻습니다.

그러나 이것은 이제 SpatialPolygonsDataFrame이 아니라 SpatialPolygons 객체이므로 writeOGR을 사용하여 shapefile로 내보낼 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까?


3
아래 답변이 도움이 되었으면 답변 텍스트 왼쪽의 체크 표시를 클릭하여 올바른 답변을 선택해야합니다.
SlowLearner 2016 년

답변:


20

이름에서 알 수 있듯이 SpatialPolygonsDataFrame은 기본적으로 데이터가 첨부 된 SpatialPolygons 객체 (속성 테이블)입니다. 데이터에는 기능이있는 행 수 이상이 있어야합니다.

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

----편집하다----

SpatialPolygonsDataFrame등을 SpatialPolygons객체 로 변환하려면 R 내의 객체 구조를 지정하면됩니다.

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

확실히 @Curlew가 맞습니다. IDs실행할 때 인수를 올바르게 지정하십시오 UnionSpatialPolygons. 그렇지 않으면 data로 다시 변환 할 때 인수를 지정하는 데 문제가 발생할 수 있습니다 SpatialPolygonsDataFrame.
fdetsch

1
물론 아주 쉽습니다. 원래 답변을 편집했습니다
Curlew

1
나는 최근에 shapefile로 작업하기 시작했고 여전히 이것에 익숙해 지려고 노력했습니다. 의 정확한 대체 데이터는 data=as.data.frame("yourData")무엇입니까? 사용하여 내부 다각형을 용해 후 unionSpatialPolygons(...), 나는 새로운 Shape 파일로 결과를 작성하려합니다
lightonphiri

SpatialPolygons 객체의 피처와 동일한 수의 행을 가진 data.frame이 있어야합니다. 문제와 관련하여 새로운 질문을하는 것이 좋습니다 union.
Curlew

1
@Curlew은 여기에 새로운 질문을 게시 주셔서 감사합니다 gis.stackexchange.com/q/121405/40108
lightonphiri

9

문제 :

1 : UnionSpatialPolygons의 결과는 공간 다각형입니다

2 : 결과를 다시 공간 폴리곤 데이터 프레임으로 변환하는 것은 큰 고통입니다

-ㅏ. 공간 다각형에 부착하려면 매우 정확한 데이터 프레임이 필요합니다

-비. UnionSpatialPolygons에 사용한 데이터는 출력보다 많은 행을 가지며 필요한 방식으로 형식이 지정되지 않습니다.

내 (추악한) 해결책 :

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

if (length (Sr @ polygons)! = nrow (data)) stop (paste ( "Object length mismatch : \ n", : argument is length zero) 추가 오류 : 경고 메시지 : 1 : * apply and slot direct 사용
Mox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.