2017-04-15 1 views
1

J'ai une pile raster avec 2 couches qui correspondent à 2 élévations. Chaque couche est un raster avec des coordonnées Lon et Lat avec la valeur 1 (toutes les valeurs manquantes sont NA), formant des polygones. RasterStack exampleTracé de la pile raster 3D

r1<-raster(xmn = 2.5, xmx = 3.3, ymn = 42, ymx = 42.5, nrows = 28, ncols = 33) 
r2<-raster(xmn = 2.5, xmx = 3.3, ymn = 42, ymx = 42.5, nrows = 28, ncols = 33) 

a<-c(421, 422, 424, 453, 454, 455, 456, 457, 485, 486, 487, 488, 489, 513, 514, 515, 516, 517, 518, 519, 546, 547, 548, 549, 550, 579, 580, 581, 582, 583, 613, 614, 615, 646, 647, 648, 649, 680, 681, 682) 
r1[a]<-1 
b<-c(514, 515, 516, 547, 548, 549, 550, 613, 614, 615, 647, 648, 649) 
r2[b]<-1 

st<-stack(r1,r2) 

Est-il possible de faire un tracé 3D montrant chaque polygone dans une hauteur différente en fonction de la couche? (x = LON, Y = LAT, Z = couche)

J'ai obtenu un tracé scatter3D pour les couches 1 et 2 Scatter3D example, mais je voudrais les montrer comme des polygones, pour voir comment les zones se chevauchent dans toute la verticale.

+0

S'il vous plaît passez la souris sur la balise R - il demande aa) minimale et b) exemple reproductible, avec lequel on peut recréer votre état actuel et problème en utilisant une copie, coller, exécuter. Peut-être que vous voulez quelque chose comme 'library (raster); bibliothèque (plot3D); bibliothèque (rgl); slogo <- pile (system.file (" externe/rlogo.grd ", paquet =" raster ")); f <- fonction (x, offset = 0, ajouter = FALSE) {x <-as.matrice (x); persp3D (z = x + offset, zlim = c (0,3000), ajouter = ajouter, phi = 50, theta = 30); persp3d (z = x + décalage, zlim = c (0,3000), col = "bleu clair", ajouter = ajouter, alpha = 0,75)}; f (slogo [[1]], 0 * 1000, F), f (slogo [[3]], 1 * 1000, T); f (slogo [[3]], 2 * 1000, T) '? – lukeA

+0

Merci beaucoup! C'est exactement ce que je voulais. – ADM

+0

@lukeA J'ai encore quelques problèmes. Pourquoi l'intrigue 3D est en train de changer la forme originale du polygone? (J'ai joint les lignes de code pour un exemple reproductible ci-dessus). Juste tracé le raster "r1" avec une simple fonction "intrigue" et le vôtre, et il semble que quelque chose se passe avec le polygone. – ADM

Répondre

0

Vous pouvez essayer

library(raster) 
library(plot3D) 
f <- function(x, offset=0, add=FALSE) { 
    poly <- rasterToPolygons(x, dissolve = T) 
    coords <- [email protected][[1]]@Polygons[[1]]@coords 
    polygon3D(
    x=coords[,1], 
    y=coords[,2], 
    z=rep(offset,nrow(coords)), 
    xlim=lims[1:2], 
    ylim=lims[3:4], 
    zlim=lims[5:6], 
    add=add, 
    col="red", 
    theta = 0 
) 
} 
lims <- c(as(extent(st),"vector"), 0, 3000) 
f(st[[1]],0*1000,F) 
for (x in 2:nlayers(st)) 
    f(st[[x]],x*1000,T) 

enter image description here

+0

Pas du tout, ce que je veux vraiment c'est tracer exactement le polygone tel qu'il est. Peut-être que je ne comprends pas vraiment comment l'intrigue 3D fonctionne, mais je ne vois pas pourquoi dans un simple tracé pour st [[1]], par exemple, le polygone semble continu (les cellules sont bien connectées) et dans le "persp3d" "fonction cette connexion disparaît et st [[1]] est tracé comme deux zones différentes. – ADM

+0

Peut-être que vous voulez jouer avec 'rasterToPolygons' - voir ma modification. – lukeA

+0

Notez également https://gis.stackexchange.com, qui pourrait être mieux adapté au problème. – lukeA