help to make a map on R
"Ronaldo Reis Jr." wrote:
Hi all, I need a little help for construct an state's map on R. The first problem is to get the data. I have a datafile of longitude and latitude in the follow format: trajectory latitude longtude T -22.045618 -51.287056 T -22.067078 -51.265888 T -22.067039 -51.207249 T -22.059690 -48.089695 T -22.075529 -48.074608 T -22.072460 -48.044472 T -22.062767 -48.298473 T -22.077349 -48.322140 T -22.047001 -48.347443 T -22.054266 -48.369331 T -22.042810 -48.392612 T -22.064812 -48.422195 T -22.062544 -48.443497 To read a file is simple, but I need that R change the value of trajectory after a blank line, reading something like this: trajectory latitude longitude T1 -22.045618 -51.287056 T1 -22.067078 -51.265888 T1 -22.067039 -51.207249 T2 -22.059690 -48.089695 T2 -22.075529 -48.074608 T2 -22.072460 -48.044472 T3 -22.062767 -48.298473 T3 -22.077349 -48.322140 T3 -22.047001 -48.347443 T3 -22.054266 -48.369331 T3 -22.042810 -48.392612 T3 -22.064812 -48.422195 T3 -22.062544 -48.443497 Each trajectory is a line that is a little piece of my map. After this, to make a map I execute: tapply() for separate the coordinates for each trajectory, something like this:
longitude <- tapply(longitude,trajectory,c) longitude
$T1 [1] -51.2871 -51.2659 -51.2072 $T2 [1] -48.0897 -48.0746 -48.0445 $T3 [1] -48.2985 -48.3221 -48.3474 -48.3693 -48.3926 -48.4222 -48.4435
latitude <- tapply(latitude,trajectory,c) latitude
$T1 [1] -22.0456 -22.0671 -22.0670 $T2 [1] -22.0597 -22.0755 -22.0725 $T3 [1] -22.0628 -22.0773 -22.0470 -22.0543 -22.0428 -22.0648 -22.0625 The nest step is to make a plot with the coordinates.
plot(longitude,latitude, asp = 1, type = "n")
And finally plot the lines for each trajectory, and all lines together, make a Sao Paulo's map and your cities limits.
lines(longitude$T1,latitude$T1) lines(longitude$T2,latitude$T2) lines(longitude$T3,latitude$T3)
How can I make to automatized this process? Because I can about 3000 trajectory. Any other idea for make this is welcome.
Hi Ronaldo,
ReadCoord <- function(file){
ext <- readLines(con = file, n = -1)
nam <- unlist(strsplit(ext[1], split = " "))
nam <- nam[nam != ""]
ext <- ext[-1]
List <- list()
j <- 1
for (i in seq(along = ext)) {
ok <- T
coord <- character(0)
while(ok){
val <- unlist(strsplit(ext[i], split = " "))
val <- val[val != ""]
if(length(val) != 3) ok <- F
else{
coord <- c(coord, paste(val[1], j, sep = ""), val[2:3])
i <- i + 1
}
}
mat <- matrix(coord, ncol = 3, byrow = T)
List[[j]] <- mat
j <- j +1
}
df <- as.data.frame(do.call("rbind", List))
names(df) <- nam
df[,2] <- as.numeric(as.character(df[,2]))
df[,3] <- as.numeric(as.character(df[,3]))
dimnames(df)[[1]] <- as.character(seq(nrow(df)))
df
}
Data <- ReadCoord("d:/analyses/travail/data/coord.txt")
attach(Data)
plot(longitude, latitude, asp = 1, type = "n")
tapply(seq(nrow(Data)),
Data[,1],
function(x, data) lines(data[x, "longitude"], data[x,
"latitude"]),
data = Data)
detach()
Hope this helps,
Renaud
Dr Renaud Lancelot, v?t?rinaire CIRAD, D?partement Elevage et M?decine V?t?rinaire (CIRAD-Emvt) Programme Productions Animales http://www.cirad.fr/presentation/programmes/prod-ani.shtml (Fran?ais) http://www.cirad.fr/presentation/en/program-eng/prod-ani.shtml (English) ISRA-LNERV tel +221 832 49 02 BP 2057 Dakar-Hann fax +221 821 18 79 (CIRAD) Senegal e-mail renaud.lancelot at cirad.fr -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._