R 无法将空间数据帧输出到.shp

R 无法将空间数据帧输出到.shp,r,gis,polygon,sf,convex-hull,R,Gis,Polygon,Sf,Convex Hull,我使用了gConvexHull()创建了一个主范围多边形,该多边形被归类为SP polygon。为了输出为.shp文件,我将其转换为空间多边形数据帧,其新类为“sf”“data.frame” 但是当我尝试使用writeOGR()输出它时,它会出现错误消息: Error in writeOGR(obj = HRDF, dsn = "C:/Users/RKirton/Documents/Data files", : inherits(obj, "Spatial") is not TRUE

我使用了
gConvexHull()
创建了一个主范围多边形,该多边形被归类为
SP polygon
。为了输出为
.shp
文件,我将其转换为
空间多边形数据帧
,其新类为
“sf”“data.frame”

但是当我尝试使用
writeOGR()
输出它时,它会出现错误消息:

Error in writeOGR(obj = HRDF, dsn = "C:/Users/RKirton/Documents/Data files",  : 
  inherits(obj, "Spatial") is not TRUE 
Error in CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options),  : 
  argument dsn, layer or driver not of length 1. 
我还尝试了
st_write()
,得到了这个新的错误消息:

Error in writeOGR(obj = HRDF, dsn = "C:/Users/RKirton/Documents/Data files",  : 
  inherits(obj, "Spatial") is not TRUE 
Error in CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options),  : 
  argument dsn, layer or driver not of length 1. 
我对R相当陌生,不确定如何解决这些错误消息

这是我的密码:

for(i in 1:length(unique(mydata$ID))) {
  hunt <- mydata[which(mydata$Season2 == "Hunt" & mydata$ID == 
  unique(mydata$ID)[i]), ]
  hunt_spdf <- SpatialPointsDataFrame(coords = cbind(hunt$X, hunt$Y), data = 
  hunt, proj4string = CRS("+init=epsg:32614"))
  HR = gConvexHull(hunt_spdf, byid = FALSE)
  plot(hunt_spdf)
  plot(HR, add = TRUE)
  HRDF = SpatialPolygonsDataFrame(HR, data = data.frame(IDs="Deer_HHR"))
  HRDF = st_as_sf(HR)
  HRDF
  HRDF$NEWCOL = "ID"
  HRDF
  st_write(obj = HRDF, dsn="C:/Users/RKirton/Documents/Data files", 
  layer=paste0('DeerHHR_', hunt$ID), driver="ESRI Shapefile")
  }
for(1中的i:length(唯一(mydata$ID))){

亨特如果你想在评论中标记某人,你需要使用
@
符号,如
@symbolXau
,然后他们会得到通知

此外,如果没有可复制的示例,很难在代码中找到错误

为了尝试并提供帮助,下面是一个工作示例,它从
data.frame
创建
sf
对象,然后查找凸面外壳,然后将.shp文件保存到目录中。如果您需要特定帮助,您需要提供一些数据供其他人使用

此示例仅使用
sf
对象,而不是
sp

library(sf)
library(sfheaders)

## An example data.frame
df <- data.frame(
  id = c( rep(1, 15), rep(2, 11))
  , x = rnorm(26)
  , y = rnorm(26)
)

sf <- sfheaders::sf_multipoint(obj = df, multipoint_id = "id", x = "x", y = "y")
sf <- sf::st_set_crs( sf, 32614 )
sf
# Simple feature collection with 2 features and 1 field
# geometry type:  MULTIPOINT
# dimension:      XY
# bbox:           xmin: 1 ymin: 1 xmax: 26 ymax: 26
# z_range:        zmin: NA zmax: NA
# m_range:        mmin: NA mmax: NA
# epsg (SRID):    32614
# proj4string:    +proj=utm +zone=14 +datum=WGS84 +units=m +no_defs
# id                       geometry
# 1  1 MULTIPOINT (1 26, 2 25, 3 2...
# 2  2 MULTIPOINT (16 11, 17 10, 1...

sf_hull <- sf::st_convex_hull( sf )
sf_hull

sf::st_write( obj = sf_hull, dsn = "~/Desktop/my_hull_dir/my_hull.shp")
库(sf)
图书馆(sfheaders)
##示例data.frame

df欢迎使用SO。我经常发现使用空间数据文件/格式也很困难。当您尝试使用
writeOGR()时会发生什么
使用原始的
sp polygon
对象?如何将其转换为
SpatialPolygonsDataFrame
?因为它不应该具有类
sf
。听起来您已经将其转换为简单要素对象(sf),因此可以使用
sf::st_write()
以.shp文件的形式输出。Hi Nate,当我尝试将writeORG与原始sp polygon一起使用时,它给出了一个错误,并表示它不是sf对象……在谷歌搜索时,我发现要使用writeORG,您需要它是sp polygon数据帧或sf对象。Hi SymbolXau,我将尝试这个!我使用st_as_sf whi转换了它ch是我的主管让我做的,让它成为一个sf对象,这样我就可以用st_write写出来……很可能我只是在某个地方弄错了。我会在我的问题中公布我所做的!