2 votos

R: ¿Tesselation de Voronoi a partir de datos de latitud / longitud?

Quiero crear un SpatialPointDataFrame y una Teselación de Voronoi a partir de mis datos .csv descargados de la EPA, disponibles aquí: http://uloz.to/xboQc7cu/no2-calif-csv

Convierto mis datos en formato SPDF de 2 maneras:

my.tab<-read.csv("no2_calif.csv", stringsAsFactors = FALSE, sep = "")
coordinates(my.tab) <- ~ Longitude + Latitude

o

my.tab<-read.csv("no2_calif.csv", stringsAsFactors = FALSE, sep = "")
my.tab.spdf<- SpatialPointsDataFrame(cbind(my.tab$Longitude, my.tab$Latitude), my.tab)

y utilizo la teselación de Voronoi publicada aquí: http://carsonfarmer.com/2009/09/voronoi-polygons-with-r/

voronoipolygons = function(layer) {
    require(deldir)
    crds = layer@coords
    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'))))
}

Utilizando cualquiera de

my.tab.voro <-voronoipolygons(my.tab)

o

my.tab.spdf.voro <-voronoipolygons(my.tab.spdf)

Obtengo el siguiente error:

 Error in data.frame(x = crds[, 1], y = crds[, 2], row.names = sapply(slot(SP,  : row names supplied are of the wrong length 

Por favor, ¿dónde podría estar el problema? ¿Necesito tener mis coordenadas en formato XY? En caso afirmativo, ¿cómo puedo hacerlo? ¿solo reproyecto mis datos?

5voto

sgwill Puntos 2444

Ejemplo reproducible, solo corrige el script para crear un data.frame ficticio.

voronoipolygons = function(layer) {
require(deldir)
crds = layer@coords
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(dummy = seq(length(SP)), row.names=sapply(slot(SP, 'polygons'), 
    function(x) slot(x, 'ID'))))
}

library(sp)
data(meuse)
coordinates(meuse) <- c("x", "y")

vp <- voronoipolygons(meuse)

plot(vp)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X