Mehr

R-Funktion für Thiessen-Polygone

R-Funktion für Thiessen-Polygone


Für einen Punktdatensatz mit Temperaturdaten möchte ich deren Thiessen-Polygone in R erstellen. Der einzige Algorithmus, den ich bisher gefunden habe, ist der von Carson Farmer (http://carsonfarmer.com/2009/09/voronoi- Polygone-mit-r/). Ich würde gerne wissen, ob es eine gebrauchsfertige Funktion gibt, die Thiessn-Polygone erstellt?


Thiessen-Polygone sind Voronoi-Diagramme - es gibt ein 'voronoi'-Paket in den CRAN-Archiven (nicht das Haupt-Repository), aber das 'deldir'-Paket erledigt die gleiche Aufgabe.

require(deldir) # Erzeuge einige Punkte x <- c(32.5, 32.1, 33.5, 32.2, 33.0) y <- c(-2.2, -3.3, -2.3, -2.9, -3.0) # Berechne die Delaunay-Triangulation, dann die Fliesen. z <- deldir(x,y,rw=c(32.0,33.6,-3.4,-2.1)) w <- tile.list(z) # Erstelle eine Liste mit hübschen Farben und zeichne damit: wcols < - topo.colors(5) plot(w, fillcol=wcols, close=TRUE)

Nun, das 'w'-Objekt ist eine 'Kachelliste', kein sp-Objekt, aber die Kacheln könnten mit den x / y-Komponenten der Liste ziemlich einfach in ein räumliches Objekt umgewandelt werden:

> str(w[1]) Liste von 1 $ :Liste von 5… $ ptNum: int 1… $ pt : Benannte num [1:2] 32.5 -2.2… - attr(*, "names")= 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] WAHR WAHR WAHR FALSCH FALSCH

Alternativ könntest du entmutigen Paket. Es akzeptiert SpatialPoints* oder Matrix als Eingabedaten.

Bibliothek('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) Punkte <- Matrix(c(x, y), ncol=2) vor <- voronoi(points) spplot(vor, "id")


Oder Sie können einfache Funktionen für R verwenden.sf::st_voronoi()Funktion. Nachfolgend finden Sie Beispiele, die von dieser Hilfeseite inspiriert wurden:

Beispiel für ein einfaches Voronoi-Gitter

Bibliothek(sf) #> Verknüpfung mit GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1 # einige zufällige Punkte generieren set.seed(2020-05-27) n <- 100 Punkte <- runif(n) %> % matrix(ncol = 2) %>% st_multipoint() voronoi_grid <- st_voronoi(points) plot(voronoi_grid, col = NA) plot(points, add = TRUE, col = "blue", pch = 16)

Erstellt am 27.05.2020 vom Reprex-Paket (v0.3.0)

Voronoi-Gitter mit Farbe basierend auf Punkteigenschaft

Hier können wir, nachdem wir die Voronoi-Polygone generiert haben, diese mit den Punkten (die wir zum Generieren der Polygone verwendet haben) schneiden. Auf diese Weise rufen wir alle Punkteigenschaften (Merkmale/Spalten/Variablen) ab, die wir zum Färben verwenden können.

Bibliothek(sf) #> Verknüpfung mit GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1 # zufällige Punkte generieren set.seed(2020-05-27) n <- 100 Punkte <- runif(n) %>% # einen numerischen Vektor aus n Zufallswerten generieren matrix(ncol = 2) %>% # in eine Matrix mit 2 Spalten konvertieren data.frame(id = 1:(n/2)) %>% # in einen Datenrahmen konvertieren und an . hinzufügen ID-Dummy-Spalte st_as_sf(coords = c("X1", "X2")) # in ein räumliches Feature-Objekt konvertieren # Voronoi-Polygone berechnen voronoi_grid <- Punkte %>% st_geometry() %>% do.call(c, .) % >% st_voronoi() %>% st_collection_extract() # vergleiche Polygone mit Punkten, um die Spalten-ID zum Färben von Punkten zu erhalten$pols <- st_intersects(points, voronoi_grid) %>% unlist %>% voronoi_grid[.] voronoi_grid_id <-(st_set ._geometry , "pols")["id"] plot(voronoi_grid_id)

Erstellt am 27.05.2020 vom Reprex-Paket (v0.3.0)


Schau das Video: ArcGIS - Point Distance - Compute distances between several other points