Answers:
顾名思义,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)
IDs
在执行时正确指定参数UnionSpatialPolygons
。否则,data
在转换回时,可能无法指定参数SpatialPolygonsDataFrame
。
data=as.data.frame("yourData")
?使用溶解内部多边形后unionSpatialPolygons(...)
,我想将结果写入新的shapefile
union
发出..
问题:
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"));