Loading [MathJax]/extensions/TeX/mathchoice.js

1 votos

¿Generar un patrón en cada uno de los conjuntos de polígonos utilizando sp (r)?

Tengo un objeto de clase SpatialPolygonsDataFrame, y para cada polígono en el dataframe tengo un número de puntos que me gustaría generar en ese polígono (por ejemplo, tengo 130 polígonos, y tengo una columna de 130 enteros que van de 0 a 10).

¿Existe una forma con sp (o con spatstat, sf, etc.) de generar un patrón aleatorio en cada polígono utilizando el número entero asociado a ese polígono?

2voto

Jay Bazuzi Puntos 194

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).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X