Как создать полигоны Тиссена из точек с помощью пакетов R?

У меня есть несколько наборов точек (для разных лет ~20)

Я хочу создать полигоны Тиссена для каждого набора точек, используя R пространственных пакетов.

Я знаю, что это можно сделать с помощью ГИС, но, поскольку я хочу пакетный процесс, Что-то в R будет

полезная.

2 ответов


вы не предоставили нам доступ к вашим данным, но вот пример для точек, представляющих города мира, используя подход, описанный Карсоном Фармером на блог. Надеюсь, это поможет тебе начать...

# Carson's Voronoi polygons function
voronoipolygons <- function(x) {
  require(deldir)
  require(sp)
  if (.hasSlot(x, 'coords')) {
    crds <- x@coords  
  } else crds <- x
  z <- deldir(crds[,1], crds[,2])
  w <- tile.list(z)
  polys <- vector(mode='list', length=length(w))
  for (i in seq(along=polys)) {
    pcrds <- cbind(w[[i]]$x, w[[i]]$y)
    pcrds <- rbind(pcrds, pcrds[1,])
    polys[[i]] <- Polygons(list(Polygon(pcrds)), ID=as.character(i))
  }
  SP <- SpatialPolygons(polys)
  voronoi <- SpatialPolygonsDataFrame(SP, data=data.frame(x=crds[,1],
    y=crds[,2], row.names=sapply(slot(SP, 'polygons'), 
    function(x) slot(x, 'ID'))))
}

Пример 1: ввод-это SpatialPointsDataFrame:

# Read in a point shapefile to be converted to a Voronoi diagram
library(rgdal)
dsn <- system.file("vectors", package = "rgdal")[1]
cities <- readOGR(dsn=dsn, layer="cities")

v <- voronoipolygons(cities)

plot(v)

Voronoi diagram of cities

Пример 2: входные векторы координат x, y:

dat <- data.frame(x=runif(100), y=runif(100))
v2 <- voronoipolygons(dat)
plot(v2)

Another voronoi diagram


тот же принцип, что и jbaums, но более простой код:

library(dismo)
library(rgdal)
cities <- shapefile(file.path(system.file("vectors", package = "rgdal")[1], "cities"))

v <- voronoi(cities)
plot(v)