2017-08-01 2 views
3

Ma question suivante se base sur la solution proposée par @jbaums sur ce post: Global Raster of geographic distancesComment sous-ensemble une trame basée sur des valeurs cellule de grille

Aux fins de reproduire l'exemple, j'ai un jeu de données raster des distances à la littoral le plus proche:

library(rasterVis); library(raster); library(maptools) 
data(wrld_simpl) 

# Create a raster template for rasterizing the polys. 
r <- raster(xmn=-180, xmx=180, ymn=-90, ymx=90, res=1) 
# Rasterize and set land pixels to NA 
r2 <- rasterize(wrld_simpl, r, 1) 
r3 <- mask(is.na(r2), r2, maskvalue=1, updatevalue=NA) 
# Calculate distance to nearest non-NA pixel 
d <- distance(r3) # if claculating distances on land instead of ocean: d <- distance(r3) 
# Optionally set non-land pixels to NA (otherwise values are "distance to non-land") 
d <- d*r2 
levelplot(d/1000, margin=FALSE, at=seq(0, maxValue(d)/1000, length=100),colorkey=list(height=0.6), main='Distance to coast (km)') 

les données ressemble à ceci: output plot

a partir de là, je dois sous-ensemble de la trame de distance (d), ou créer une nouvelle trame, qui ne contient que pour dont la distance au littoral est inférieure à 200 km. J'ai essayé using getValues ​​() pour identifier les cellules pour lesquelles la valeur < = 200 (comme montrer ci-dessous), mais jusqu'ici sans succès. Quelqu'un peut-il aider? Suis-je sur la bonne voie?

#vector of desired cell numbers 
my.pts <- which(getValues(d) <= 200) 
# create raster the same size as d filled with NAs 
bar <- raster(ncols=ncol(d), nrows=nrow(d), res=res(d)) 
bar[] <- NA 
# replace the values with those in d 
bar[my.pts] <- d[my.pts] 

Répondre

3

Je pense que c'est ce que vous cherchez, vous pouvez traiter une trame comme une matrice ici juste après d <- d*r2 ligne:

d[d>=200000]<-NA 
levelplot(d/1000, margin=FALSE, at=seq(0, maxValue(d)/1000, length=100),colorkey=list(height=0.6), main='Distance to coast (km)') 

(si vous avez oublié: l'appareil est en mètres donc le seuil devrait être 200000, pas 200)

+0

Super! Ça marche. Merci @Ouistiti! – fabfab