sábado, 29 de agosto de 2009

Calcular distância entre as cidades do Brasil

Olá pessoal! Achei um post interessante onde o autor (Marcos Roberto Silva) colocou um código perl que usa o google maps para dizer qual a distância entre duas cidades. A quem interessar o artigo está aqui.
Eu vi o código e ele é bem simples, assim fiz uma versão usando php (o php tem muitas coisas parecidas com o perl, afinal ele tem suas origens ligadas ao perl).
Este é o código php que faz toda a mágica:
Update: Olhe no fim do post
$origem = "Oiapoque-AP";
$origem_codificada = urlencode($origem);
$destino = "Chui-RS";
$destino_codificado = urlencode($destino);

if (! empty($origem) && ! empty($destino)) {
$url = "http://maps.google.com.br/maps?saddr={$origem_codificada}&daddr={$destino_codificado}&hl=en&z=1";
$conteudo = file_get_contents($url);
$dados = split(',distance:"', $conteudo);
$distancia = split(' km",', $dados[1]);
$distancia[0] = str_ireplace(',', '', $distancia[0]);

$mensagem = "Distancia de $origem a $destino = $distancia[0] km\n";
} else {
$mensagem = "Preencha os dois campos como Goiânia-GO e Brasília-DF";
}



O código praticamente não tem diferença do original. Você pode adaptá-lo facilmente para exibi-lo em uma página web.

Update:
Conforme os comentários este código já está obsoleto, tanto pelo fato de a Google ter mudado a resposta da página quanto pelo fato do código provocar warnings do tipo Deprecated nas versões mais recentes do PHP. No código abaixo uma versão que alterei rapidamente. Aparentemente ela funciona, mas depende muito da resposta enviada pelos servidores da Google.

9 comentários:

  1. Olá Ricardo. Gostei da sua versão em PHP.
    Parabéns.
    Abraço.
    Marcos Roberto Silva

    ResponderExcluir
  2. Bom dia,

    como eu faria caso quisesse que calcular a distancia entre 3 pontos.

    Por exemplo, vou de curitiba - pr a sao paulo -pr e logo apos a salvador - ba.

    o site maps.google.com.br oferece esta opcao..

    mas nao estou conseguindo adaptar o script. pode me ajudar?

    ResponderExcluir
  3. Olá Diogo!
    Você pode olhar neste endereço:
    http://mapki.com/index.php?title=Google_Map_Parameters
    Na parte sobre geocode tem um exemplo de como usar quando forem mais de duas localizações. Neste caso é só adicionar os parâmetros na string da url.

    ResponderExcluir
  4. Não consegui, está dando erros no php.
    Poderia atualizar o código para a versão do PHP atual?

    ResponderExcluir
  5. Senhor/Senhora Anônimo, por favor dê uma olhada no post novamente. Graças ao seu comentário eu o atualizei.

    ResponderExcluir
  6. Não como e nem porque, está dando como resultado: "html>"

    Estranho...

    Se for algo que coloquei errado me diga por favor... pois assim posso "adaptar" para que o próprio usuário escolha as cidades.

    Grato

    ResponderExcluir
    Respostas
    1. João da uma olhada aqui, eu consegui fazer de boa.
      http://balaiotecnologico.blogspot.com.br/2012/01/informacoes-sobre-rotas-com-versao-3-da.html

      Excluir
  7. O meu ta igual do João tbm, sai "html>" como resultado.

    ResponderExcluir