# lecture du fichier dans lequel figure les coordonées et degré numérique read.csv2("adr_geocode_avec_r.txt", sep=";", header = TRUE)->gc0 # sauvegarde après importation gc <- gc0 gc->gc1 # vérification : la longueur de la base de coordonnées doit être la même que celle des adresses dupliquées print(length(gc1[, 1])) print(length(adr.trip[, 1])) print("Les deux nombres ci-dessus doivent être identiques et multiple de 3, sinon il y a une coquille.") gc2 <- gc1 # ajout du nacces naccess <- adr0[, 1] naccess2 <- rep(naccess, each = 3) gc21 <- cbind(gc2, naccess2) # ajout des numérotations gc21 <- cbind(gc21, numdu) gc21 <- cbind(gc21, numad) # ajout des adresses gc21 <- cbind(gc21, adr.trip) # transformation des lat et lon en valeur numeric (par défaut elles sont en facteurs) gc21[, 3] <- as.numeric(as.character(gc21[, 3], digits = 16), digits = 16) gc21[, 4] <- as.numeric(as.character(gc21[, 4], digits = 16), digits = 16) # seq(1,length(gc),by=3)->indprec indprec <- gc21[, 2] retprec <- table(indprec) #barplot(retprec) print(table(indprec)) print("0=Unknown ; 1=Country ; 2=Region ; 3=Subregion ; 4=Town ; 5=Postcode ; 6=Street ; 7=Intersection ; 8=Address ; 9=Premise") # calcul de distance par rapport à notre dame en Km (48.852963, 2.349959) library(GEOmap) gc4 <- gc21[, 3:4] gc5 <- gc4 for (i in 1:length(gc4[, 1])) { # distance total distaz(48.852963, 2.349959, gc4[i, 1], gc4[i, 2]) # coordonnée selon les Y (latitude) en mètres ydist <- distaz(48.852963, 2.349959, gc4[i, 1], 2.349959) gc5[i, 1] <- ydist$dist # coordonnés selon les X (longitude) xdist <- distaz(48.852963, 2.349959, 48.852963, gc4[i, 2]) gc5[i, 2] <- xdist$dist } # calcul du signe for (i in 1:length(gc5[, 1])) { # latitude (Y) if ((48.852963 < gc4[i, 1]) == FALSE) {gc5[i, 1] <- -gc5[i, 1]} # longitude (X) if ((2.349959 < gc4[i, 2]) == FALSE) {gc5[i, 2] <- -gc5[i, 2]} } # ajout des distances au tableau adresult <- cbind(gc21, gc5) gc3 <- gc21 # calcul de l'orientation # création des triplets a<-seq(1,nrow(gc3), by=3) b<-seq(2,nrow(gc3), by=3) c<-seq(3,nrow(gc3), by=3) # calcul de l'azimut # On calcul l'angle avec la première adresse référente require(GEOmap) azim <- distaz(gc3[, 3][a][1], gc3[, 4][a][1], gc3[, 3][b][1], gc3[, 4][b][1]) if ((azim$az < 0) == TRUE) {angl <- (azim$baz)} else {angl <- azim$az} for (i in 2:((length(gc3[, 1])/3))) { azim <- distaz(gc3[, 3][a][i], gc3[, 4][a][i], gc3[, 3][b][i], gc3[, 4][b][i]) if ((azim$az < 0) == TRUE) {angl[i] <- (azim$baz)} else {angl[i] <- azim$az} } # on met ces résultats dans la case des adresses originales azim<-0 cbind(adresult, azim)->adresult for (i in 1:(nrow(adresult)/3)) { angl[i]->adresult[,"azim"][a][i] } # On calcul l'angle avec la deuxième adresse référente azim2 <- distaz(gc3[, 3][a][1], gc3[, 4][a][1], gc3[, 3][c][1], gc3[, 4][c][1]) if ((azim2$az < 0) == TRUE) {angl2 <- (azim2$baz)} else {angl2 <- azim2$az} for (i in 2:((length(gc3[, 1])/3))) { azim2 <- distaz(gc3[, 3][a][i], gc3[, 4][a][i], gc3[, 3][c][i], gc3[, 4][c][i]) if ((azim2$az < 0) == TRUE) {angl2[i] <- (azim2$baz)} else {angl2[i] <- azim2$az} } # on met ces résultats dans la case des premières adresses référentes for (i in 1:(nrow(adresult)/3)) { angl2[i]->adresult[,"azim"][b][i] } # On calcul l'angle avec les deux adresses référentes azim3 <- distaz(gc3[, 3][b][1], gc3[, 4][b][1], gc3[, 3][c][1], gc3[, 4][c][1]) if ((azim3$az < 0) == TRUE) {angl3 <-(azim3$baz)} else {angl3 <- azim3$az} for (i in 2:((length(gc3[, 1])/3))) { azim3 <- distaz(gc3[, 3][b][i], gc3[, 4][b][i], gc3[, 3][c][i], gc3[, 4][c][i]) if ((azim3$az < 0) == TRUE) {angl3[i] <-(azim3$baz)} else {angl3[i] <- azim3$az} } # on met ces résultats dans la case des deuxièmes adresses référentes for (i in 1:(nrow(adresult)/3)) {angl3[i]->adresult[,"azim"][c][i]} round(angl)->angl round(angl2)->angl2 round(angl3)->angl3 # tableau des angles cbind(angl, angl2, angl3)->tabangl # reconstitution du tableau avec le nombres d'individus d'origine et les trois colonnes avec les trois angles cbind(adresult[a,-15], tabangl)->adresult.test.def head(adresult.test.def) tail(adresult.test.def) # choix de la valeur d'angle la plus plausible # Calcul des moyennes # si angle2 = angle3 alors moyennes des deux (seront écrasés à la prohcaine étape les doublons) which( (round(angl2/angl3) == 1 )==TRUE)->bc round(rowMeans(adresult.test.def[bc,c(16,17)]))->adresult.test.def[bc,18] # si angle1 = angle3 alors moyennes des deux which( (round(angl/angl3) == 1 )==TRUE)->ac round(rowMeans(adresult.test.def[ac,c(15,17)]))->adresult.test.def[ac,18] # si angle1 = angle2 alors moyennes des deux which( (round(angl/angl2) == 1 )==TRUE)->ab round(rowMeans(adresult.test.def[ab,c(15,16)]))->adresult.test.def[ab,18] # si angle1 = angle2 et angle1=angle3 alors moyennes des trois which( ((round(angl/angl2) == 1 ) & ( round(angl/angl3) == 1))==TRUE)->abc round(rowMeans(adresult.test.def[abc,c(15,16,17)]))->adresult.test.def[abc,18] # fichiers de sortie write.csv2(adresult.test.def[,c(5,8,9,10,11,13,14,18)], file="resultdef.txt", row.names = FALSE) # écriture de ce tableau dans un fichier qui va servir pour Rgoogle image cbind(adresult, rep(adresult.test.def$V18, each=3))->adresult write.csv2(adresult, file = "adresult.rgoogle_img.txt", row.names = FALSE) head(adresult)