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 ^^