Valeu Augusto ! Gostei ! Principalmente porque fica bem clara a utilização do loop for().
Muito interessante !
Ficou bastante didático.

Mauricio
UFBA

Em 3 de outubro de 2012 17:04, Augusto Ribas <ribas.aca@gmail.com> escreveu:
Acho que a pior forma de fazer isso é com um loop de for()

require(XML)

coordenadas<- function(cep) {
 url_lat_lon <-
paste(sprintf("http://maps.google.com/maps/api/geocode/xml?address=%s,",
cep),"%20Brasil&sensor=false", sep="")
 lat_lon=xmlApply(xmlRoot(xmlTreeParse(
readLines(url_lat_lon)))[['result']][['geometry']][['location']],
"[[", 1)
 return(lat_lon)
 }

cep=40110010
coordenadas(cep)


ceps<-c(40110010,01317000,17120000)


resultado<-data.frame(cep=NA,lat=NA,long=NA)

for(i in 1:length(ceps)) {
  resposta<-coordenadas(ceps[i])
  resultado[i,"cep"]<-as.numeric(ceps[i])
  resultado[i,"lat"]<-as.character(resposta[[1]])[6]
  resultado[i,"long"]<-as.character(resposta[[2]])[6]
  }

resultado

       cep         lat        long
1 40110010 -12.9896162 -38.4922117
2  1317000 -25.2912987 -57.6265412
3 17120000 -22.5229044 -49.1344326

Da pra fazer a mesma coisa com alguma função da familia apply
Mas no final das contas vai ser um acesso por cep, o que vai deixar a
obtenção de muitos ceps lento.
Mas enquanto ninguem posta uma solução melhor, da pra quebrar o galho com essa

Em 3 de outubro de 2012 15:04, Mauricio Cardeal
<mcardeal2010@gmail.com> escreveu:
> Recentemente foi postado na lista uma solução para a obtenção de lat long a
> partir de um cep:
>
> require(XML)
>
> coordenadas<- function(cep) {
>  url_lat_lon <-
> paste(sprintf("http://maps.google.com/maps/api/geocode/xml?address=%s,",
> cep),"%20Brasil&sensor=false", sep="")
>  lat_lon=xmlApply(xmlRoot(xmlTreeParse(
> readLines(url_lat_lon)))[['result']][['geometry']][['location']], "[[", 1)
>  return(lat_lon)
>  }
>
> cep=40110010
> coordenadas(cep)
>
>> coordenadas(cep)
> $lat
> -12.9896162
>
> $lng
> -38.4922117
>
> Ficou excelente. Mas fiquei imaginando se ao invés de apenas 1 cep eu
> tivesse uma série, por exemplo:
>
> ceps <- c(40110010,01317000,17120000)
>
> Como modificaria a função acima rotina para ter algo do tipo (em um data
> frame), sem precisar rodar 1 a 1 cada cep:
>
> cep             lat        long
> 40110010  -12.98    -38.49
> 01317000  -25.29    -57.62
> 17120000  -22.52    -49.13
>
> Valeu
> --
> Mauricio Cardeal
> UFBA
>
>
> _______________________________________________
> R-br mailing list
> R-br@listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código
> mínimo reproduzível.



--
Grato
Augusto C. A. Ribas

Site Pessoal: http://augustoribas.heliohost.org
Lattes: http://lattes.cnpq.br/7355685961127056
_______________________________________________
R-br mailing list
R-br@listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.



--
Mauricio Cardeal
UFBA