[R-br] obtenção de lat long para uma série de CEPs
Augusto Ribas
ribas.aca em gmail.com
Quarta Outubro 3 17:04:52 BRT 2012
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 em 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 em 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
Mais detalhes sobre a lista de discussão R-br