attribuer une valeur à une maille

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

pinson laura
Messages : 66
Enregistré le : 30 Juil 2015, 11:35

attribuer une valeur à une maille

Messagepar pinson laura » 18 Juin 2020, 07:30

Bonjour à tous,

J'ai besoin d'un peu d'aide pour rendre mon code un peu moins "bourrin".

Je souhaite calculer la distance de points de mesures à d'autres points de mon axe routier. Pour cela, je crée mon réseau de lignes avec des capteurs, je calcule des distances sur mon linéaire en créant une grille, en chaque point. On peut donc savoir à quelle distance les points sont sur le linéique.

Pour la suite, je souhaite élargir x5 ma maille tout autour de l'axe pur arriver à une résolution de 50m et non plus de 10m (car là, je suis à une résolution de 10m). J'ai fais un script qui marche mais un peu bourrin...y a t-il une solution plus simple pour que je puisse le réaliser

voici mon script :

Code : Tout sélectionner

dtrav <- matrix(t(dist1$v),nnx,nny)

   filled.contour(x=unique(grilleRoute[,"x"]),y=unique(grilleRoute[,"y"]),
            z=dtrav,
            nlevels=40,
            color=colorRampPalette(brewer.pal(n = 11, name = "Spectral"), space = "Lab"),
            asp=1,
            
            plot.axes={
               points(input3[,1],input3[,2],col=1,cex=0.5, pch=16);# ajout tubes
               points(input3[k,1],input3[k,2],col=2,cex=1, pch=16);
               
               axis(side=1);
               axis(side=2)
            },
   )

   # attribuer au maille<50 des voies la valeur de la voie: cette valeur est la distance au point mesure #

   dtrav2 <- dtrav

   for(i in 2:(nrow(dtrav)-1)){
      
      for(j in 2:(ncol(dtrav)-1)){
         if(!is.na(dtrav[i,j])){
            if(is.na(dtrav2[i+1,j])) dtrav2[i+1,j] <- dtrav2[i,j]
            if(is.na(dtrav2[i+1,j+1])) dtrav2[i+1,j+1] <- dtrav2[i,j]
            if(is.na(dtrav2[i+1,j-1])) dtrav2[i+1,j-1] <- dtrav2[i,j]
            if(is.na(dtrav2[i,j+1])) dtrav2[i,j+1] <- dtrav2[i,j]
            if(is.na(dtrav2[i,j-1])) dtrav2[i,j-1] <- dtrav2[i,j]
            if(is.na(dtrav2[i-1,j])) dtrav2[i-1,j] <- dtrav2[i,j]
            if(is.na(dtrav2[i-1,j+1])) dtrav2[i-1,j+1] <- dtrav2[i,j]
            if(is.na(dtrav2[i-1,j-1])) dtrav2[i-1,j-1] <- dtrav2[i,j]
         }
      }
   }

   dtrav3 <- dtrav2

   for(i in 2:(nrow(dtrav2)-1)){
      
      for(j in 2:(ncol(dtrav2)-1)){
         if(!is.na(dtrav2[i,j])){
            if(is.na(dtrav3[i+1,j])) dtrav3[i+1,j] <- dtrav3[i,j]
            if(is.na(dtrav3[i+1,j+1])) dtrav3[i+1,j+1] <- dtrav3[i,j]
            if(is.na(dtrav3[i+1,j-1])) dtrav3[i+1,j-1] <- dtrav3[i,j]
            if(is.na(dtrav3[i,j+1])) dtrav3[i,j+1] <- dtrav3[i,j]
            if(is.na(dtrav3[i,j-1])) dtrav3[i,j-1] <- dtrav3[i,j]
            if(is.na(dtrav3[i-1,j])) dtrav3[i-1,j] <- dtrav3[i,j]
            if(is.na(dtrav3[i-1,j+1])) dtrav3[i-1,j+1] <- dtrav3[i,j]
            if(is.na(dtrav3[i-1,j-1])) dtrav3[i-1,j-1] <- dtrav3[i,j]
         }
      }
   }

   dtrav4 <- dtrav3

   for(i in 2:(nrow(dtrav3)-1)){
      
      for(j in 2:(ncol(dtrav3)-1)){
         if(!is.na(dtrav3[i,j])){
            if(is.na(dtrav4[i+1,j])) dtrav4[i+1,j] <- dtrav4[i,j]
            if(is.na(dtrav4[i+1,j+1])) dtrav4[i+1,j+1] <- dtrav4[i,j]
            if(is.na(dtrav4[i+1,j-1])) dtrav4[i+1,j-1] <- dtrav4[i,j]
            if(is.na(dtrav4[i,j+1])) dtrav4[i,j+1] <- dtrav4[i,j]
            if(is.na(dtrav4[i,j-1])) dtrav4[i,j-1] <- dtrav4[i,j]
            if(is.na(dtrav4[i-1,j])) dtrav4[i-1,j] <- dtrav4[i,j]
            if(is.na(dtrav4[i-1,j+1])) dtrav4[i-1,j+1] <- dtrav4[i,j]
            if(is.na(dtrav4[i-1,j-1])) dtrav4[i-1,j-1] <- dtrav4[i,j]
         }
      }
   }



Je fais la même manip' 5 fois....je souhaite donc réduire cela à quelques lignes de prog


Merci d'avance pour votre aide!!!
en espérant que vous pourrez m'aider et que vous avez compris mon pb un peu bourrin ^^

Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité