Suite

Fonction R pour les polygones de Thiessen


Pour un ensemble de données ponctuelles avec des données de température dont je dispose, je souhaite créer leurs polygones de Thiessen en R. Jusqu'à présent, le seul algorithme que j'ai trouvé est celui de Carson Farmer (http://carsonfarmer.com/2009/09/voronoi- polygones-avec-r/). J'aimerais savoir s'il existe une fonction prête à l'emploi qui crée des polygones Thiessn ?


Les polygones de Thiessen sont des diagrammes de Voronoi - il existe un package 'voronoi' disponible dans les archives du CRAN (pas le référentiel principal), mais le package 'deldir' fait le même travail.

require(deldir) # Créer des points x <- c(32.5, 32.1, 33.5, 32.2, 33.0) y <- c(-2,2, -3,3, -2,3, -2,9, -3,0) # Calculer la triangulation de Delaunay, puis les tuiles. z <- deldir(x,y,rw=c(32.0,33.6,-3.4,-2.1)) w <- tile.list(z) # Faites une liste de jolies couleurs et utilisez-les pour tracer : wcols < - topo.colors(5) plot(w, fillcol=wcols, close=TRUE)

Maintenant, l'objet 'w' est une 'liste de tuiles', pas un objet sp, mais les tuiles pourraient être transformées en un objet spatial assez facilement, en utilisant les composants x/y de la liste :

> str(w[1]) Liste de 1 $ :Liste de 5… $ ptNum : int 1… $ pt : Nommé num [1:2] 32,5 -2.2… - attr(*, "noms")= chr [1 :2] "x" "y"… $ x : num [1:5] 33 32 32 32.6 33… $ y : num [1:5] -2,1 -2,1 -2,4 -2,67 -2,46… $ bp : logi [ 1:5] VRAI VRAI VRAI FAUX FAUX

Alternativement, vous pouvez utiliser démo paquet. Il accepte les SpatialPoints* ou la matrice comme données d'entrée.

library('dismo') x <- c(32.5, 32.1, 33.5, 32.2, 33.0) y <- c(-2,2, -3,3, -2,3, -2,9, -3,0) points <- matrix(c(x, y), ncol=2) vor <- voronoi(points) spplot(vor, "id")


Ou, peut utiliser des fonctionnalités simples pour R. Donc,sf::st_voronoi()une fonction. Voici des exemples inspirés de cette page d'aide :

Exemple de grille de voronoi simple

library(sf) #> Lien vers GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1 # génère des points aléatoires set.seed(2020-05-27) n <- 100 points <- runif(n) %> % matrice(ncol = 2) %>% st_multipoint() voronoi_grid <- st_voronoi(points) plot(voronoi_grid, col = NA) plot(points, add = TRUE, col = "blue", pch = 16)

Créé le 2020-05-27 par le package reprex (v0.3.0)

Grille de Voronoi avec couleur basée sur la propriété du point

Ici, après avoir généré les polygones de Voronoi, nous pouvons les croiser avec les points (que nous avons utilisés pour générer les polygones). Ce faisant, nous récupérons toutes les propriétés de point (caractéristiques/colonnes/variables) que nous pouvons utiliser pour la coloration.

library(sf) #> Lien vers GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1 # générer des points aléatoires set.seed(2020-05-27) n <- 100 points <- runif(n) %>% # générer un vecteur numérique de n valeurs aléatoires matrice(ncol = 2) %>% # convertir en matrice avec 2 colonnes data.frame(id = 1:(n/2)) %>% # convertir en trame de données et ajouter un id dummy column st_as_sf(coords = c("X1", "X2")) # convertir en objet de caractéristique spatiale # calculer les polygones de Voronoi voronoi_grid <- points %>% st_geometry() %>% do.call(c, .) % >% st_voronoi() %>% st_collection_extract() # fait correspondre les polygones aux points pour obtenir l'identifiant de la colonne pour les points de coloration$pols <- st_intersects(points, voronoi_grid) %>% unlist %>% voronoi_grid[.] voronoi_grid_id <- st_set_geometry(points , "pols")["id"] plot(voronoi_grid_id)

Créé le 2020-05-27 par le package reprex (v0.3.0)


Voir la vidéo: Thiessen Polygon Method (Octobre 2021).