1 votos

Quiero crear un diagrama de Voronoi conservando los datos en el marco de datos

Utilizaremos st_voronoi() para crear un diagrama de Voronoi.

Tengo tres preguntas.

Punto uno.

Entiendo que el argumento de st_voronoi() debe ser el siguiente dato.

Formato SFC (se produce un error en el formato SF)

Formato multipunto (no en forma de punto). ¿Es esto correcto?

Punto dos.

Si ejecuta el siguiente código, se convertirá en GEOMETRYCOLLECTION. ¿Hay alguna forma de convertirlo en MULTIPOINT?

Punto tres.

El "nz_height" original contiene la palabra "elevación". Sin embargo, la conversión al formato SFC ha borrado esa columna. Me gustaría averiguar la elevación de cada zona del diagrama de Voronoi. ¿Qué tipo de procesamiento debo hacer?

Si hay alguien que lo sepa, por favor, que nos lo cuente.

library(sf)
library(sp)
library(spData)

print(class(nz))

print(class(nz_height))
print(head(nz_height))
plot(st_geometry(nz_height))

#POINT to MULTIPOINT
nz_height_mp <- st_cast(nz_height,"MULTIPOINT")
print(head(nz_height_mp))

#sf to sfc
nz_height_mp_sfc <- st_union(nz_height_mp)
print(class(nz_height_mp_sfc))
print(head(nz_height_mp_sfc))

nz_height_v <-st_voronoi(nz_height_mp_sfc)

print(class(nz_height_v))
print(head(nz_height_v))
plot(st_geometry(nz_height_v),col=0)

5voto

Jay Bazuzi Puntos 194

Esta es una función que puede tomar un sf marco de datos con POINT geometría en cada fila y producir la geometría del polígono en el mismo orden:

st_voronoi_point <- function(points){
    ## points must be POINT geometry
    if(!all(st_geometry_type(points) == "POINT")){
        stop("Input not  POINT geometries")
    }
    g = st_combine(st_geometry(points)) # make multipoint
    v = st_voronoi(g)
    v = st_collection_extract(v)
    return(v[unlist(st_intersects(p, v))])
}

p = st_as_sf(data.frame(x=runif(10),y=runif(10),A=letters[1:10]),coords=1:2)
v = st_voronoi_point(p)

v es ahora el vector de geometría del polígono que coincide con el orden en la fuente. Si quieres puedes entonces hacer:

pv = st_set_geometry(p, v)

para hacer una versión de p pero con los polígonos como geometría.

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