[R-br] [OT] Distancias entre municipios
Lucas Barbosa
lucasbcr em gmail.com
Quarta Novembro 23 21:16:46 BRST 2011
Paulo,
Esse código é tipo um rascunho, acho que não cheguei a testar nem dez
vezes. Eu só fiz com base num padrão que eu vi nos html's das poucas
páginas que eu acessei. Como o gmaps é cheio de personalizações/frescuras,
pode ser que esse código só funcione acessando da minha máquina, do meu IP
ou do meu login no google, vai saber...
A parte do encoding foi a mais difícil de acertar aqui. Ficou essa
gambiarra aí, mas assim foi o único jeito que rodou aqui.
Eu testei essa função só em R x64 2.13 (windows7). Você tá mexendo com a
2.13 também?
Em 22 de novembro de 2011 18:28, Paulo Nogueira <paulons em gmail.com>escreveu:
> Lucas,
> provavelmente está tudo funcionando bem aí no seu computador, mas fui
> rodar seu código e tive problemas.
>
>
> > #código:
> > distancia <- function(cidade1, uf1, cidade2, uf2){
> + link <- paste( "http://maps.google.com/maps?saddr=", cidade1, "+-+",
> uf1, ",+Brasil&daddr=", cidade2, "+-+", uf2, ",+Brasil&hl=pt-BR&ie=UTF8",
> sep="")
> + link <- iconv(link, 'latin1', 'UTF-8')
> + Encoding(link) <- 'bytes'
> +
> + pagina <- readLines(url(link))
> +
> + linha <- grep('<div class="altroute-rcol altroute-info"> <span>', pagina)
> + distancia <- pagina[linha]
> + distancia <- strsplit(distancia, '<div class="altroute-rcol
> altroute-info"> <span>')[[1]][2]
> + distancia <- strsplit(distancia, '</span>')[[1]][1]
> + return(list(distancia = distancia, link=link))
> + }
>
> >
> > distancia("Brasília", "DF", "Pirenópolis", "GO")
> Erro em strsplit(distancia, "<div class=\"altroute-rcol altroute-info\">
> <span>")[[1]] :
> índice fora de limites
> Além disso: Mensagens de aviso perdidas:
> 1: In readLines(url(link)) :
> linha final incompleta encontrada em '
> http://maps.google.com/maps?saddr=BrasÃ
> lia+-+DF,+Brasil&daddr=Pirenópolis+-+GO,+Brasil&hl=pt-BR&ie=UTF8'
> 2: In grep("<div class=\"altroute-rcol altroute-info\"> <span>", pagina) :
> string de entrada 1 é inválida nesse locale
> 3: In grep("<div class=\"altroute-rcol altroute-info\"> <span>", pagina) :
> string de entrada 161 é inválida nesse locale
> 4: In grep("<div class=\"altroute-rcol altroute-info\"> <span>", pagina) :
> string de entrada 240 é inválida nesse locale
> 5: In grep("<div class=\"altroute-rcol altroute-info\"> <span>", pagina) :
> string de entrada 248 é inválida nesse locale
>
> >
>
> O erro está na função Enconding, mas não consegui entender muito bem do
> que se trata.
> Tenho interesse nessa função e gostaria de fazr funcionar aqui. Você tem
> alguma luz?
>
> Obrigado,
> Paulo
>
>
> Em 4 de novembro de 2011 12:20, Lucas Barbosa <lucasbcr em gmail.com>escreveu:
>
> Bom dia pessoal,
>> Tá aí uma ideia usando o google maps. Parece estar funcionando bem, mas
>> ainda não testei direito. Notem que eu escolhi usar sempre a primeira rota
>> que o gmaps sugere (a mais rápida e não a mais curta.)
>> Cada execução leva quase 1 s então deve demorar uma eternidade pra todos
>> os municípios. E pra piorar eu só consegui rodar essa função usando um
>> núcleo, parece não ser possível executar a readLines com mais de um ao
>> mesmo tempo (talvez o problema seja com o *snow*.)
>> Eu não sei usar muito bem esses *encodings* então não reparem nessa
>> parte, foi tentativa e erro mesmo.
>>
>> #código:
>> distancia <- function(cidade1, uf1, cidade2, uf2){
>> link <- paste( "http://maps.google.com/maps?saddr=", cidade1,
>> "+-+", uf1, ",+Brasil&daddr=", cidade2, "+-+", uf2,
>> ",+Brasil&hl=pt-BR&ie=UTF8", sep="")
>> link <- iconv(link, 'latin1', 'UTF-8')
>> Encoding(link) <- 'bytes'
>>
>> pagina <- readLines(url(link))
>>
>> linha <- grep('<div class="altroute-rcol altroute-info"> <span>',
>> pagina)
>> distancia <- pagina[linha]
>> distancia <- strsplit(distancia, '<div class="altroute-rcol
>> altroute-info"> <span>')[[1]][2]
>> distancia <- strsplit(distancia, '</span>')[[1]][1]
>> return(list(distancia = distancia, link=link))
>> }
>>
>> distancia("Brasília", "DF", "Pirenópolis", "GO")
>> distancia("Brasília", "DF", "Goiânia", "GO")
>> distancia("Brasília", "DF", "Natal", "RN")
>> distancia("Brasília", "DF", "Florianópolis", "SC")
>> distancia("Brasília", "DF", "Porto Alegre", "RS")
>>
>> Em 4 de novembro de 2011 00:31, Mario Azevedo <mario.azevedo em gmail.com>escreveu:
>>
>> A matriz será muito grande 5566 x 5566 = 30980356 elementos. Se cada
>>> elemento for um número real, ele consumirá, no mínimo, 4 bytes de memória,
>>> totalizando algo perto de 118 Mbytes. Não sei quais são os limites, mas me
>>> parece que deve ficar difícil tratar de um "bicho" desse tamanho.
>>>
>>> sds.
>>>
>>>
>>> 2011/11/3 Mario Azevedo <mario.azevedo em gmail.com>
>>>
>>>> Sim. O programa irá calcular essa matriz de distâncias e você pode
>>>> estabelecer a unidade de medida.
>>>>
>>>> Lembrando que você deve tomar cuidado porque, talvez, o que lhe
>>>> interesse seja o centróide da área da sede do município e não da da área
>>>> total. Para alguns municípios a diferença pode ser grande.
>>>>
>>>> 2011/11/3 Pedro Rafael <pedro.rafael.marinho em gmail.com>
>>>>
>>>>> Existe alguma forma de converter essa distância euclidiana entre
>>>>> centroides de municípios em cm, m, km?
>>>>>
>>>>> Em 2 de novembro de 2011 22:47, Mario Azevedo [via R-br] <
>>>>> ml-node+s2285057n3984003h70 em n4.nabble.com> escreveu:
>>>>>
>>>>>> Realmente, para uma área tão grande, me parece melhor usar distâncias
>>>>>> euclidianas. Calcular as distâncias por vias terrestres entre cada par de
>>>>>> municípios é uma tarefa que demandaria um trabalho gigantesco, pois não
>>>>>> existem bases com essas informações (completas). Dependendo do tipo do
>>>>>> problema em estudo, é uma informação que não faz muito sentido. Eu posso
>>>>>> ter um trecho de via de 20 km que consigo percorrer em 10 minutos (a 120
>>>>>> km/h) e posso ter outro com a mesma extensão, mas com condições ruins de
>>>>>> pavimentação ou de topografia, na qual levarei muito mais tempo.
>>>>>>
>>>>>> Só completando um pouco as opiniões de alguns.
>>>>>>
>>>>>> Saudações.
>>>>>>
>>>>>> Mário
>>>>>>
>>>>>>
>>>>>> 2011/11/2 Ricardo Tavares <[hidden email]<http://user/SendEmail.jtp?type=node&node=3984003&i=0>
>>>>>> >
>>>>>>
>>>>>>> Oi Leandro e demais colegas,
>>>>>>>
>>>>>>> A base shape é disponibilizada pelo IBGE no seguinte link:
>>>>>>>
>>>>>>>
>>>>>>> ftp://geoftp.ibge.gov.br/mapas/malhas_digitais/municipio_2007/Malha_Municipal_Digital_2007_2500/Disseminacao_2007/Proj_Geografica/SIRGAS2000/ArcView_Shp/2007/E2500/Brasil/
>>>>>>>
>>>>>>> Um abraço e até mais,
>>>>>>> Ricardo.
>>>>>>>
>>>>>>> Em 1 de novembro de 2011 15:55, Leandro Marino <[hidden email]<http://user/SendEmail.jtp?type=node&node=3984003&i=1>
>>>>>>> > escreveu:
>>>>>>>
>>>>>>>> Caros,****
>>>>>>>>
>>>>>>>> ** **
>>>>>>>>
>>>>>>>> Por acaso alguém sabe me dizer se existe em algum local uma tabela
>>>>>>>> / matriz de distancias entre TODOS os municípios brasileiros?****
>>>>>>>>
>>>>>>>> ** **
>>>>>>>>
>>>>>>>> Estava precisando deste tipo de dado.****
>>>>>>>>
>>>>>>>> ** **
>>>>>>>>
>>>>>>>> Atenciosamente,
>>>>>>>> *Leandro Lins Marino**
>>>>>>>> **Centro de Avaliação
>>>>>>>> Fundação CESGRANRIO
>>>>>>>> Rua Santa Alexandrina, 1011 - 2º andar
>>>>>>>> Rio de Janeiro, RJ - CEP: 20261-903
>>>>>>>> *
>>>>>>>> *(** **<a href="tel:%2821%29%202103-9600" value="+552121039600"
>>>>>>>> target="_blank">(21) 2103-9600 R.:236
>>>>>>>> ***** [hidden email]<http://user/SendEmail.jtp?type=node&node=3984003&i=2>
>>>>>>>> *
>>>>>>>>
>>>>>>>> ** **
>>>>>>>>
>>>>>>>> P* **Antes de imprimir* *pense em sua responsabilidade e
>>>>>>>> compromisso com o* *MEIO AMBIENTE* ****
>>>>>>>>
>>>>>>>> ** **
>>>>>>>>
>>>>>>>> Esta mensagem, incluindo seus anexos, pode conter informacoes
>>>>>>>> privilegiadas e/ou de carater confidencial, nao podendo ser retransmitida
>>>>>>>> sem autorizacao do remetente. Se voce nao e o destinatario ou pessoa
>>>>>>>> autorizada a recebe-la, informamos que o seu uso, divulgacao, copia ou
>>>>>>>> arquivamento sao proibidos. ****
>>>>>>>>
>>>>>>>> Portanto, se você recebeu esta mensagem por engano, por favor, nos
>>>>>>>> informe respondendo imediatamente a este e-mail e em seguida apague-a.
>>>>>>>> ****
>>>>>>>>
>>>>>>>> ** **
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> R-br mailing list
>>>>>>>> [hidden email]<http://user/SendEmail.jtp?type=node&node=3984003&i=3>
>>>>>>>>
>>>>>>>> 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.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Professor Adjunto - área Estatística
>>>>>>> Departamento de Matemática
>>>>>>> Universidade Federal de Ouro Preto
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> R-br mailing list
>>>>>>> [hidden email]<http://user/SendEmail.jtp?type=node&node=3984003&i=4>
>>>>>>>
>>>>>>> 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.
>>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> R-br mailing list
>>>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=3984003&i=5>
>>>>>> 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.
>>>>>>
>>>>>> ------------------------------
>>>>>> If you reply to this email, your message will be added to the
>>>>>> discussion below:
>>>>>>
>>>>>> http://r-br.2285057.n4.nabble.com/R-br-OT-Distancias-entre-municipios-tp3964600p3984003.html
>>>>>> To unsubscribe from R-br, click here<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3357982&code=cGVkcm8ucmFmYWVsLm1hcmluaG9AZ21haWwuY29tfDMzNTc5ODJ8NTAyMjI0MDYw>.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Saudações,
>>>>> Pedro Rafael Diniz Marinho.
>>>>> Estatístico - Secretaria de Estado da Saúde - PB.
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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.
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> 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.
>>>
>>
>>
>> _______________________________________________
>> 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.
>>
>
>
> _______________________________________________
> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20111123/13d77d25/attachment.html>
Mais detalhes sobre a lista de discussão R-br