问题描述
我有一个shapefile,其中包含大约400个不同大小的多边形。我一直在尝试创建一个随机的点层,在400个多边形中的每一个中都有特定数量的点。
我尝试使用 spsample
函数,但它会生成一个不尊重每个多边形的点的随机层(这是整个shapefile的一般随机点层)。
例如:
下载:biogeo.ucdavis.edu/data/diva/adm/USA_adm.zip
它是文件“ USA_adm1”
此shapefile包含52个多边形。我希望在52个多边形的每一个中放置特定数量的随机点。例如,每个州内随机分布100个点。
希望您能帮助我。
谢谢
解决方法
通过sf
包在一个sf对象上使用st_sample
:
library(sf)
library(ggplot2)
# using data included with sf package,# it contains 100 polygons
nc <- st_read(system.file("shape/nc.shp",package="sf"))
# st_sample needs a vector telling it how many samples for each polygon
# here we're using 3 for each polygon
samples_per_polygon <- rep(3,nrow(nc))
samples <- st_sample(nc,samples_per_polygon)
ggplot() + geom_sf(data = nc) + geom_sf(data = samples)