2012-02-22 5 views
7

У меня есть несколько наборов точек (для разных лет ~ 20)Как создать многоугольники из точек с помощью пакетов R?

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

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

полезно.

+2

'install.packages ("СОС"); библиотека ("СОС"); findFn ("thiessen") ' –

+0

Я использую ArcGIS для того же самого сейчас ... – user2760

ответ

16

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

# Carson's Voronoi polygons function 
voronoipolygons <- function(x) { 
    require(deldir) 
    require(sp) 
    if (.hasSlot(x, 'coords')) { 
    crds <- [email protected] 
    } 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: Ввод в векторы х, у координаты:

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

Another voronoi diagram

+0

Я изменил функцию так, чтобы она принимала векторы координат (ожидаемые в порядке x, y), а также' SpatialPointsDataFrame'. – jbaums

+0

Это сработало..TY! – user2760

+0

Рад это услышать. – jbaums

1

Тот же принцип, как показано на jbaums, но проще код:

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

v <- voronoi(cities) 
plot(v) 
Смежные вопросы