【问题标题】:Cannot output spatial dataframe to .shp无法将空间数据帧输出到 .shp
【发布时间】:2020-04-03 21:48:47
【问题描述】:

我使用gConvexHull() 创建了归类为SP polygon 的主范围多边形。为了输出为.shp 文件,我将其转换为SpatialPolygonsDataFrame,其新类为"sf" "data.frame"

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

Error in writeOGR(obj = HRDF, dsn = "C:/Users/RKirton/Documents/Data files",  : 
  inherits(obj, "Spatial") is not TRUE 

我也尝试了st_write() 并收到了这个新的错误消息:

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

【问题讨论】:

  • 欢迎来到 SO。我也经常发现处理空间数据文件/格式也很困难。当您尝试将 writeOGR() 与原始 sp polygon 对象一起使用时会发生什么?
  • 您是如何将其转换为 SpatialPolygonsDataFrame 的?因为它不应该有 sf 类。听起来您已将其转换为 Simple Feature 对象 (sf),因此您可以使用 sf::st_write() 将其输出为 .shp 文件。
  • 嗨 Nate,当我尝试将 writeORG 与原始 sp 多边形一起使用时,它给出了一个错误,并说它不是一个 sf 对象...在谷歌搜索时我发现要使用 writeOGR,你需要它要么是一个 sp 多边形数据框,要么你需要它是一个 sf 对象。
  • 嗨 SymbolixAU,我会试试这个!我使用 st_as_sf 对其进行了转换,这是我的主管告诉我要做的,以使其成为 sf 对象,以便我可以用 st_write 将其写出来……很有可能我只是在某处交叉了线。我会在我的问题中发布我所做的!

标签: r gis polygon sf convex-hull


【解决方案1】:

如果您想在评论中标记某人,您需要使用@ 符号,如@SymbolixAU,然后他们会收到通知。

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

为了提供帮助,这里有一个工作示例,它从 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2020-02-01
    • 2018-03-21
    • 2020-02-16
    • 1970-01-01
    • 2017-08-20
    • 2016-10-20
    相关资源
    最近更新 更多