2016-03-02 1 views
2

J'ai trois objets SpatialPointsDataFrame qui ne sont en réalité que d'un point chacun. Mon intention est de faire un raster pour chacun d'entre eux avec une extension qui inclut le point, de sorte que toutes les cellules sauf le point soient "NA", donc je peux utiliser la fonction distance() dans le paquet raster pour générer un raster couche où la valeur z est la distance à la seule cellule dans laquelle z n'est pas "NA".Problèmes avec la fonction de tramage dans R

Mon code fonctionne sans problème avec le premier des trois objets, mais l'erreur suivante apparaît pour les deux autres:

error in seq.default(zrng[1], zrng[2], length.out = cuts + 2) : 
    'from' cannot be NA, NaN or infinite 
    In addition: Warning messages: 
    1: In asMethod(object) : 
     complete map seems to be NA's -- no selection was made 
    2: In min(x) : no non-missing arguments to min; returning Inf 
    3: In max(x) : no non-missing arguments to max; returning -Inf 

Je double et triple vérifié que mes points sont contenus dans la mesure du raster, et je ne peux pas mettre le doigt sur le problème

Voici mon code:

library(raster) 

TIM <- data.frame() 
TIM[1,1] <- -13.8309 
TIM[1,2] <- 28.9942 

VEN <- data.frame() 
VEN[1,1] <- -15.7886 
VEN[1,2] <- 27.8444 

MCL <- data.frame() 
MCL[1,1] <- -13.5325 
MCL[1,2] <- 29.2914 


coordinates(TIM) <- ~V1+V2 
coordinates(VEN) <- ~V1+V2 
coordinates(MCL) <- ~V1+V2 

bb2 <- matrix(c(-20, -9.5, 20.5, 31.5), nrow = 2, ncol = 2, byrow = T) 
bb2 <- extent(bb2) 

r <- raster(nrows = 1217, ncols = 1047) 
r <- setExtent(r, bb2, keepres=F) 

rMCL <- rasterize(MCL, r) 
spplot(rMCL) 

#so far so good, but from now on it doesn't work 

rVEN <- rasterize(VEN, r) 
spplot(rVEN) 


rTIM <- rasterize(TIM, r) 
spplot(rTIM) 

Edit: Je l'ai essayé tourner à un SpatialGridDataF Rame et j'arrive à le tracer mais mon point n'est pas dans l'étendue de la trame, c'est-à-dire que l'intrigue est vide. Code:

rr <- as(rTIM, "SpatialGridDataFrame") 
spplot(rr) 
#this produces an empty plot 

J'ai aussi essayé de traçage dans une trame sans un nombre prédéterminé de colonnes et de lignes, et il fonctionne:

r <- raster() 
r <- setExtent(r, bb2, keepres=F) 
rTIM <- rasterize(TIM, r) 
spplot(rTIM) 
# this produces a raster containing my point 

Le problème est, je voudrais vraiment besoin de définir la résolution de l'intrigue donc chaque cellule du raster représente environ 1 km carré, ce qui est ce que je reçois avec le nombre de lignes et de colonnes que j'avais précédemment utilisé. Des idées?

Répondre

0

Je peux l'obtenir pour travailler en ajoutant trois ensembles de coordonnées à la même trame de données, puis en utilisant la fonction de comptage lors de la création de la trame:

library(raster) 

# Add all 3 sets of coordinates to the same dataframe 

df <- data.frame() 
df[1,1] <- -13.8309 
df[1,2] <- 28.9942 
df[2,1] <- -15.7886 
df[2,2] <- 27.8444 
df[3,1] <- -13.5325 
df[3,2] <- 29.2914 

# Create new column in dataframe (we will use this for the count function) 

df$x <- c(1,1,1) 

# Convert to spatial points dataframe 

df.sp <- df 
coordinates(df.sp) <- ~ V1+V2 

# Make raster 

bb2 <- matrix(c(-20, -9.5, 20.5, 31.5), nrow = 2, ncol = 2, byrow = T) 
bb2 <- extent(bb2) 

r <- raster(nrows = 1217, ncols = 1047) 
r <- setExtent(r, bb2, keepres=F) 

# Rasterise using the count function 

raster <- rasterize(df.sp, r, field= "x", fun="count") 

# The table shows there are 3 cells with a value of 1 so it seems to have worked 

table(values(raster)) 

1 
3 

spplot(raster) 

raster 

class  : RasterLayer 
dimensions : 1217, 1047, 1274199 (nrow, ncol, ncell) 
resolution : 0.01002865, 0.00903862 (x, y) 
extent  : -20, -9.5, 20.5, 31.5 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory 
names  : layer 
values  : 1, 1 (min, max) 

L'intrigue ne fait pas beaucoup de sens pour moi mais je pense que c'est parce que vous avez beaucoup de cellules dans votre raster de sorte que vous ne pouvez pas vraiment voir quelque chose. Les valeurs dans le raster sont certainement 3 cellules avec une valeur de 1 et tout le reste est NA, donc je pense que ce que vous voulez.