使用R将空间多边形对象转换为数据框


18

我的目标是通过合并某些多边形来修改现有的shapefile。

导入shapefile并使用UnionSpatialPolygons命令后,得到所需的多边形轮廓。

但是,现在这是一个SpatialPolygons对象,而不是SpatialPolygonsDataFrame,因此无法使用writeOGR将其导出到shapefile。

我该如何解决这个问题?


3
如果以下答案有用,则应通过单击答案文本左侧的对勾标记将其选择为正确的答案。
SlowLearner 2013年

Answers:


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",)

- - 编辑 - -

如果要转换SpatialPolygonsDataFrameSpatialPolygons对象,则只需要解决R中的对象结构

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

当然,@ Curlew是正确的。确保IDs在执行时正确指定参数UnionSpatialPolygons。否则,data在转换回时,可能无法指定参数SpatialPolygonsDataFrame
fdetsch

1
当然,很容易。我为此编辑了原始答案
Curlew 2014年

1
我只是最近才开始使用shapefile,现在仍在尝试熟悉它。应该用什么确切的替代youData data=as.data.frame("yourData")?使用溶解内部多边形后unionSpatialPolygons(...),我想将结果写入新的shapefile
lightonphiri 2014年

您需要具有与SpatialPolygons对象中的要素具有相同行数的data.frame。更好地提出新问题关于你union发出..
杓鹬

1
@Curlew谢谢,刚刚在这里发布了新问题gis.stackexchange.com/q/121405/40108
lightonphiri 2014年

9

问题:

1:UnionSpatialPolygons的结果是空间多边形

2:将结果转换回空间多边形数据框是一个真正的难题

-一种。您需要一个非常精确的数据框才能附加到空间多边形

-b。您用于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”,:参数长度为零,另外,警告消息:1:直接使用* apply和slot
Mox
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.