Para sp
necesita iterar sobre las características y llamar a spsample
para cada uno con el número correcto de puntos a generar. Aquí hay una línea única dada una trama de datos de polígonos espaciales con la columna npts
:
p = do.call(
rbind,
lapply(
1:nrow(polys),
function(i){
SpatialPointsDataFrame(
spsample(polys[i,],
n=polys$npts[i],
type="random"),
data=data.frame(srcpoly=rep(i,polys$npts[i]))
)
}
)
)
El marco de datos de puntos espaciales devuelto registra de qué característica del polígono procede cada punto:
> table(p$srcpoly)
1 2 3 4
1 10 100 1000
que es de mi conjunto de pruebas:
![enter image description here]()
La función correspondiente en el sf
para sf
objetos de clase se vectoriza sobre n
Así que lo haces:
> pp = st_sample(polys, polys$npts, "random")
pero no se recupera de qué polígono viene cada punto sin hacer un st_intersection
(o similar).