使用 sf 包中的 st_sample 在子几何中生成随机点
Generating random points within sub geometries using st_sample from the sf package
基本上,我试图在 shapefile 的多边形内创建 5 个随机空间点。我正在尝试使用 sf
包中的 st_sample()
,但我的 for
循环有问题。
示例:
library(terra)
library(sf)
#10 polygons
v <- vect(system.file("ex/lux.shp", package="terra"))
v <- v[c(1:10)]
#Empty list to store values
empty_list <- list()
#for loop
for(i in 1:length(v$ID_1)){
empty_list[i] <- st_sample(x = v[i,], size = 5,
type = "random", exact =T, by_polygon = T)
}
循环看起来相当简单明了。我认为问题在于 st_sample()
每次迭代仅存储 1 个值。我应该使用列表以外的东西来存储输出值,还是 for
循环不是这里的正确选项?
无需执行 for
循环。您只需要为 st_sample()
函数的 size
参数指定一个向量。
我不知道你为什么要从 SpatVector
开始,但我也给了你将对象转换为 sf
class 对象的代码,因为 st_sample()
函数需要一个 sf
或 sfc
class 对象
所以,请找到下面的代表。
Reprex
- 代码
library(terra)
library(sf)
# Convert 'SpatVector' into 'sf' object
v_sf <- st_as_sf(v)
# Create the random points (here, 5 random points for each polygon)
set.seed(452)
points <- st_sample(v_sf, size = c(5,5), type = "random")
- 输出
plot(st_geometry(v_sf))
plot(points, pch = 20, add= TRUE)
由 reprex package (v2.0.1)
于 2021-11-23 创建
基本上,我试图在 shapefile 的多边形内创建 5 个随机空间点。我正在尝试使用 sf
包中的 st_sample()
,但我的 for
循环有问题。
示例:
library(terra)
library(sf)
#10 polygons
v <- vect(system.file("ex/lux.shp", package="terra"))
v <- v[c(1:10)]
#Empty list to store values
empty_list <- list()
#for loop
for(i in 1:length(v$ID_1)){
empty_list[i] <- st_sample(x = v[i,], size = 5,
type = "random", exact =T, by_polygon = T)
}
循环看起来相当简单明了。我认为问题在于 st_sample()
每次迭代仅存储 1 个值。我应该使用列表以外的东西来存储输出值,还是 for
循环不是这里的正确选项?
无需执行 for
循环。您只需要为 st_sample()
函数的 size
参数指定一个向量。
我不知道你为什么要从 SpatVector
开始,但我也给了你将对象转换为 sf
class 对象的代码,因为 st_sample()
函数需要一个 sf
或 sfc
class 对象
所以,请找到下面的代表。
Reprex
- 代码
library(terra)
library(sf)
# Convert 'SpatVector' into 'sf' object
v_sf <- st_as_sf(v)
# Create the random points (here, 5 random points for each polygon)
set.seed(452)
points <- st_sample(v_sf, size = c(5,5), type = "random")
- 输出
plot(st_geometry(v_sf))
plot(points, pch = 20, add= TRUE)
由 reprex package (v2.0.1)
于 2021-11-23 创建