2017-09-13 2 views
0

J'espère que je n'ai pas négligé un problème similaire quelque part d'autre de ce côté, mais je ne pouvais pas encore obtenir une réponse à mon problème ...Comment sélectionner des pixels spécifiques de raster (pente> = certaine valeur)

J'ai un DEM avec une résolution de 10x10m. Je dois trouver tous les pixels qui ont une pente> 35 ° et trouver leur exposition. (Après (?) Ceci, je dois le lier d'une façon ou d'une autre avec une grille d'un autre programme de 100x100m et faire plus de travail dessus). Comment puis-je le faire mieux?

Ce que je l'ai fait jusqu'à présent:

DEM=raster("DEM_10m.tif") 

DEM 
class  : RasterLayer 
dimensions : 2731, 2407, 6573517 (nrow, ncol, ncell) 
resolution : 10, 10 (x, y) 
extent  : 57495.5, 81565.5, 202547.5, 229857.5 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +datum=hermannskogel +units=m +no_defs +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 
names  : DEM_10m 
values  : -32768, 32767 (min, max) 

slope_aspect <- terrain(DEM, opt=c("slope", "aspect"), unit="degrees") 
slope_aspect$elevation <- DEM 
slope_aspect 
       x  y  slope  aspect 
1  79560.5 229462.5 3.007349e+01 3.273391e+02 
2  79570.5 229462.5 2.946020e+01 3.351363e+02 
3  79550.5 229452.5 3.025771e+01 3.150000e+02 
4  79560.5 229452.5 3.200538e+01 3.231301e+02 
5  79570.5 229452.5 2.902189e+01 3.374794e+02 
6  79540.5 229442.5 2.391028e+01 3.195739e+02 
7  79550.5 229442.5 3.054151e+01 3.063844e+02 
8  79560.5 229442.5 2.719728e+01 3.110548e+02 

etc.

Quand je fais:

slope_35<-slope_aspect[slope_aspect$slope>=35] 
slope_35 
slope  aspect elevation 
     [1,] 35.14579 7.349564e+01  969 
     [2,] 35.13729 1.465922e+02  975 
     [3,] 35.94211 4.639718e+01  1063 
     [4,] 36.00673 4.081508e+01  1057 
     [5,] 36.19906 9.785331e+01  917 

etc. retourne une matrice et les coordonnées sont partis (probablement que je besoin plus tard de relier les pixels du DEM aux pixels d'un fichier .asc). Eh bien, je ne sais pas vraiment comment résoudre cette tâche, malheureusement, je suis un débutant R ... Nous vous remercions de votre aide!

Répondre

0

Vous pouvez obtenir une trame avec seulement les pixels sur ce seuil:

slope_aspect <- terrain(DEM, opt=c("slope", "aspect"), unit="degrees") 

slope_aspect_masked <- mask(x = slope_aspect , mask = slope_aspect[[1]]>35 , maskvalue = 0) 

La sortie sera un fichier raster avec des valeurs valides en pixels avec une valeur de pente sur 35. Vous pouvez l'utiliser avec d'autres grille une analyse plus approfondie.

+0

Merci beaucoup !! Pouvez-vous peut-être aussi me dire comment je peux ajouter un calque qui imprime "N"/"E"/"S"/"W" selon la valeur de la couche "aspect"? Ainsi par exemple si l'aspect est entre 316-360 ou 0-45 il devrait imprimer "N" pour le nord, si l'aspect 46-135 degrés impriment "E", l'aspect 136-225 "S" et si l'aspect = 226-315 impriment " W ". Ou ai-je besoin de le convertir en un cadre de données pour faire de telles choses? – Lara

+0

J'ai aussi besoin de convertir ce raster en un plus grand - celui-ci montre les valeurs (aspect/pente/élévation) pour les pixels 10x10m, je devrais convertir les valeurs pour obtenir un raster avec des valeurs adaptées aux pixels 100x100m. Donc, d'une manière ou d'une autre, j'ai probablement besoin de calculer la moyenne sur les cellules voisines 10x10? Désolé pour toutes ces questions ... – Lara

+0

@Lara vous pouvez utiliser [resample] (https://www.rdocumentation.org/packages/raster/versions/2.5-8/topics/resample) ou [projectRaster] (https://www.rdocumentation.org/packages/raster/versions/2.5-8/topics/projectRaster) fonctions. En outre, vous pouvez utiliser la valeur moyenne avec [aggregate] (https://www.rdocumentation.org/packages/raster/versions/2.5-8/topics/agrgregate) avec 'fact = 10' –