2012-08-28 23 views
12

Me gustaría combinar los polígonos de Voronoi con el mapa, para usar esto más adelante para el análisis espacial. Tengo varios puntos y shapefile que quiero combinar y luego guardar como shapefile/spatil polygons. Para obtener los polígonos voronoi utilizo la función de this topic.Combinación de polígonos y mapas de Voronoi

Mi código es el siguiente:

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)) 

Mi mapa está disponible aquí: 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')))) 
} 

Y mi código para obtener voronoipolygons:

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

resultado: enter image description here

Quiero tener este polígono voronoi dentro de mi mapa como nuevo spatialpolygon.

¡Agradecería awsws!

Editar:

Para que quede claro, que quiero lograr algo como esto (estas líneas deben ser creados a partir de polígonos de Voronoi):

enter image description here

+2

No está claro lo que quieres. Usted tiene los polígonos voronoi como un marco de datos de polígonos espaciales en el objeto pzn.coords. – Spacedman

+0

El enlace que proporciona es un archivo '.rdata'. Puede crear un nuevo archivo 'myvoronietc.rdata' usando' save() ', p. Ej. 'save ('pzn.coords', 'lotsa_other_data', file = 'myvoronietc.rdata')'. –

+0

Quiero combinar ambos archivos, tener polígonos voronoi dentro de mi mapa, no tener estos límites cuadrados de polígonos voronoi, pero en los límites de mi mapa. – Maciej

Respuesta

12

función ligeramente modificado, toma un argumento adicional de polígonos espaciales y se extiende a ese cuadro:

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) 

} 

Después, realice:

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

Tenga en cuenta que gg es objeto A SpatialPolygons, y que podría recibir una advertencia acerca de las cadenas Proj4 que no coinciden. Es posible que deba asignar la cadena proj4 a uno u otro de los objetos.

+0

Muchas gracias ¡Mucho, eso es lo que quería! – Maciej

+0

Tiene un 'pznall' perdido en la línea 7 (debe ser' poly') – jbaums

+0

Estoy de acuerdo, 'rw = as.numeric (t (bbox (pznall)))' debe reemplazarse por 'rw = as.numeric (t (bb)) '(como' bbox (poly) 'ya se guardó en' bb'). –

Cuestiones relacionadas