2012-02-22 111 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)