[R-es] Orden en los polígonos de Voronoi

Isidro Hidalgo Arellano |h|d@|go @end|ng |rom jccm@e@
Vie Sep 8 16:42:02 CEST 2023


Hola, Carlos:
Lo he resuelto con:
voronoi_esp <- nucleos_esp |>
  st_union() |>
  st_voronoi() |>
  st_collection_extract()
voronoi_esp <- voronoi_esp[unlist(st_intersects(nucleos_esp, voronoi_esp))]

De todas formas , muchas gracias, como siempre.

Isidro Hidalgo Arellano
Observatorio del Mercado de Trabajo
Junta de Comunidades de Castilla – La Mancha


De: Carlos Ortega <cof using qualityexcellence.es>
Enviado el: viernes, 8 de septiembre de 2023 16:14
Para: Isidro Hidalgo Arellano <ihidalgo using jccm.es>
CC: r-help-es using r-project.org
Asunto: Re: [R-es] Orden en los polígonos de Voronoi

Hola Isidro,

¿Qué tal?
Se lo he preguntado a chatGPT....

Y me dice esto:


La función st_voronoi() del paquete sf en R calcula los polígonos de Voronoi a partir de un conjunto de puntos. Sin embargo, el orden de los polígonos resultantes no necesariamente coincide con el orden de los puntos de entrada.

Para mantener el orden original de los puntos, puedes hacer lo siguiente:

  1.  Calcula los polígonos de Voronoi.
  2.  Para cada punto de entrada, determina cuál polígono de Voronoi contiene ese punto. Este paso garantizará que el polígono de Voronoi correspondiente al primer punto sea el primero en la lista, y así sucesivamente.
  3.  Almacena los polígonos de Voronoi en el mismo orden que los puntos de entrada.

#-------
library(sf)

# Crear algunos puntos (sustituir por tus datos)
pts <- st_as_sf(data.frame(x = c(1,3,5), y = c(1,3,2)), coords = c("x", "y"), crs = 4326)

# Calcular polígonos de Voronoi
voronoi <- st_voronoi(pts)

# Convertir Voronoi a sf
voronoi_sf <- st_collection_extract(voronoi, "POLYGON")

# Para cada punto, encontrar el polígono de Voronoi correspondiente
order_voronoi <- integer(nrow(pts))

for (i in 1:nrow(pts)) {
  for (j in 1:length(voronoi_sf)) {
    if (st_intersects(pts[i, ], voronoi_sf[j, ], sparse = FALSE)[1, 1]) {
      order_voronoi[i] <- j
      break
    }
  }
}

# Ordenar polígonos de Voronoi de acuerdo con el orden de los puntos
ordered_voronoi <- voronoi_sf[order_voronoi]

# Ahora, ordered_voronoi tiene los polígonos en el orden deseado.
#-------

A ver si así te funciona...

Gracias,
Carlos Ortega
www.qualityexcellence.es<http://www.qualityexcellence.es>

El vie, 8 sept 2023 a las 14:14, Isidro Hidalgo Arellano via R-help-es (<r-help-es using r-project.org<mailto:r-help-es using r-project.org>>) escribió:
Buenos días:
La función st_voronoi() del paquete sf desordena los polígonos resultantes. La he usado con los puntos de los municipios de España y el polígono de Voronoi nº 1 no es el correspondiente al primer núcleo de población.
¿Sabéis alguna forma de mantener el orden original, según los puntos usados?
He intentado relacionar los polígonos resultantes con cada punto usado. Esto en teoría es posible, ya que el punto es el centroide del polígono, pero no doy con la tecla:

library(sf)
library(mapSpain)
library(tidyverse)
clm <- esp_get_prov_siane("Castilla-La Mancha", epsg = 3035)
municipios_esp <- esp_get_munic_siane(year = 2019, epsg = 3035) # AVISO: tarda un poco
nucleos_esp <- esp_get_capimun(year = 2022, epsg = 3035)
voronoi_esp <- nucleos_esp |>
  st_union() |>
  st_voronoi()

Como siempre, mil gracias...

Isidro Hidalgo Arellano
Observatorio del Mercado de Trabajo
Junta de Comunidades de Castilla - La Mancha


        [[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
R-help-es using r-project.org<mailto:R-help-es using r-project.org>
https://stat.ethz.ch/mailman/listinfo/r-help-es


--
Saludos,
Carlos Ortega
www.qualityexcellence.es<http://www.qualityexcellence.es>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es