2012-08-28 29 views
12

Tôi muốn kết hợp các đa giác Voronoi với bản đồ, để sử dụng sau này để phân tích không gian. Tôi có số điểm và shapefile mà tôi muốn kết hợp và sau đó lưu dưới dạng đa giác không gian/shapefile. Để có được đa giác voronoi tôi sử dụng chức năng từ this topic.Kết hợp đa giác Voronoi và bản đồ

Mã của tôi là như sau:

coords<-data.frame(LONG=c(16.9252,16.9363,16.9408,16.8720,16.9167,16.9461,16.9093,16.9457,16.9171,16.8506,16.9471,16.8723,16.9444,16.9212,16.8809,16.9191,16.8968,16.8719,16.9669,16.8845), 
LAT=c(52.4064,52.4266,52.3836,52.3959,52.4496,52.3924,52.4012,52.3924,52.3777,52.4368,52.4574,52.3945,52.4572,52.3962,52.3816,52.3809,52.3956,52.3761,52.4236,52.4539)) 

Bản đồ của tôi hiện có sẵn ở đây: https://docs.google.com/file/d/0B-ZJyVlQBsqlSURiN284dF9YNUk/edit

library(rgdal) 
voronoipolygons <- function(x) { 
    require(deldir) 
    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)) 
    require(sp) 
    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')))) 
} 

Và mã của tôi để có được voronoipolygons:

pzn.coords<-voronoipolygons(coords) 
plot(pznall) 
plot(pzn.coords,add=T) 
points(coords$LONG,coords$LAT) 

kết quả: enter image description here

Tôi muốn có đa giác voronoi này bên trong bản đồ của tôi là không gian mới.

Tôi sẽ biết ơn vì những người anwsers!

Edit:

Để được rõ ràng, tôi muốn đạt được một cái gì đó như thế này (dòng này nên được tạo ra từ đa giác Voronoi):

enter image description here

+2

Nó không rõ ràng những gì bạn muốn. Bạn có các đa giác voronoi như một spatialpolygonsdataframe trong đối tượng pzn.coords. – Spacedman

+0

Liên kết bạn cung cấp là tệp '.rdata'. Bạn có thể tạo một tệp 'myvoronietc.rdata' mới bằng cách sử dụng' save() ', ví dụ: 'save ('pzn.coords', 'lotsa_other_data', file = 'myvoronietc.rdata')'. –

+0

Tôi muốn kết hợp cả hai tập tin, để có các đa giác voronoi bên trong bản đồ của tôi, không có ranh giới hình vuông của các đa giác voronoi nhưng trong ranh giới bản đồ của tôi. – Maciej

Trả lời

12

chức năng sửa đổi Hơi, mất đối số đa giác không gian bổ sung và mở rộng đến hộp đó:

voronoipolygons <- function(x,poly) { 
    require(deldir) 
    if (.hasSlot(x, 'coords')) { 
    crds <- [email protected] 
    } else crds <- x 
    bb = bbox(poly) 
    rw = as.numeric(t(bb)) 
    z <- deldir(crds[,1], crds[,2],rw=rw) 
    w <- tile.list(z) 
    polys <- vector(mode='list', length=length(w)) 
    require(sp) 
    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')))) 

    return(voronoi) 

} 

Sau đó làm:

pzn.coords<-voronoipolygons(coords,pznall) 
library(rgeos) 
gg = gIntersection(pznall,pzn.coords,byid=TRUE) 
plot(gg) 

Lưu ý rằng gg là phản đối một SpatialPolygons, và bạn có thể nhận được một cảnh báo về chuỗi proj4 không hạnh phúc. Bạn có thể cần gán chuỗi proj4 cho một hoặc một số đối tượng khác.

+0

Cảm ơn bạn rất nhiều, đó là những gì tôi muốn! – Maciej

+0

Bạn có một 'pznall' trên dòng 7 (nên là' poly') – jbaums

+0

Tôi đồng ý, 'rw = as.numeric (t (bbox (pznall))) nên được thay thế bằng' rw = as.numeric (t (bb)) '(như' bbox (poly) 'đã được lưu vào' bb'). –

Các vấn đề liên quan