在spsurvey中如何在多边形内部绘制GRTS点?

3
在之前版本的spsurvey软件包中,可以使用相当复杂的“design”规范在shapefile中的多边形内绘制随机点。(请参见这里的示例)。
更新后的spsurvey软件包(5.0.1)似乎非常用户友好,但我无法弄清如何在多边形内执行多个点的GRTS绘制。以下是一个示例:
假设我想在蒙大拿州和怀俄明州内使用GRTS绘制10个随机点。grts()调用需要一个sf对象,因此我们可以首先获取一个sf对象。
library(raster)
library(sf)
library(spsurvey)

## Get state outlines
US <- raster::getData(country = "United States", level = 1)
States.outline <- US[US$NAME_1 %in% c("Montana","Wyoming"),]

# convert to sf object
states.out <- st_as_sf(States.outline)

接下来,如果我们想按州划分,并且每个州需要十个点,我们需要:

# Define the number of points to draw from each state
strata_n <- c(Montana = 10, Wyoming = 10)

strata_n 对象随后被输入到 grts() 调用中,其中 NAME_1 变量是州的名称。

# Attempt to make grts draw 
grts(sframe = states.out, 
     stratum_var = "NAME_1", 
     n_base = strata_n
     )

这会返回一个错误信息:

在检查输入到grtspts的过程中,发现了一个或多个错误。输入以下命令以查看所有输入错误消息:stopprnt() 要查看错误子集(例如,错误1和5),请输入stopprnt(m=c(1,5))

运行stopprnt()将会得到以下信息:

输入 错误消息 n_base : 每个分层必须有一个样本大小不大于表示该分层的'sframe'中行数的点数

这是一条非常清晰的信息 - 我们不能从每个多边形中绘制多个点,因为sf对象每个州只有一行。

那么:使用新的和改进的spsurvey软件包,如何从多边形内绘制多个点?任何提示或方向都将不胜感激。

1个回答

2
这是一个 bug。我已经更新了开发版本,可以通过运行以下命令(在安装 remotes 包后)进行安装。
remotes::install_github("USEPA/spsurvey", ref = "develop")

可能需要几周时间才能在CRAN上反映出spsurvey中的更改。感谢您发现了这个问题。


谢谢@Michael -- 我下载了开发版本,看起来可能仍然存在一个错误(至少在上面的示例问题中绘制grts样本时):Error in st_poly_sample(x, size = size, ..., type = type, by_polygon = by_polygon) : hexagonal sampling on geographic coordinates not supported; consider projecting first. - Jacob_Oram
@Jacob_Oram 发生错误是因为您正在使用地理坐标而不是投影坐标;如需更多信息,请参阅 spsurvey 的 "开始" 小节第6和第7节 此处,以及其中的参考文献。如果您的数据在北美,那么 NAD 83 / Conus Albers (crs = 5070) 通常是可以的。 - Michael Dumelle
@Jacob_Oram 我会在下一个spsurvey更新中添加更详细的错误信息。再次感谢。 - Michael Dumelle
使用建议的 sf::st_transform() 工具,一切都很顺利。感谢您的帮助! - Jacob_Oram
@Jacob_Oram 这些更改现在已在 CRAN 的 5.1.0 版本中得到反映。 - Michael Dumelle
1
太好了。再次感谢您及时修复,Michael! - Jacob_Oram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接