2012-02-22 84 views
7

我有多组点(不同年份〜20)如何从使用R包的点创建泰森多边形?

我想使用r空间包为每组点创建泰森多边形。

我知道这是可以利用GIS进行,但因为我想在R A批量处理的东西会

很有帮助。

+2

'install.packages( “SOS”);库( “SOS”); findFn(“thiessen”)' – 2012-02-22 22:06:06

+0

我现在正在使用ArcGIS ... – user2760 2012-02-22 22:08:23

回答

16

您还没有给我们访问您的数据,但这里有一个代表世界各城市的点的例子,使用Carson Farmer在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:输入是X,Y的载体坐标:

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

Another voronoi diagram

+0

我修改了函数,以便它接受坐标向量(预期为x,y)以及'SpatialPointsDataFrame'。 – jbaums 2012-02-23 01:51:44

+0

这工作..吨! – user2760 2012-02-23 02:20:50

+0

很高兴听到它。 – jbaums 2012-02-23 02:38:09

1

如jbaums示出,但更简单的代码相同的原理:

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

v <- voronoi(cities) 
plot(v)