Página 1 de 2

[DICA] Calcular a distância entre endereços com Google Maps

Enviado: 08 Mai 2012, 17:38
por Editadoo
Olá Pessoal, acabei desenvolvendo uma função usando a API do Google maps. Ela tem a função de calcular a distância entre 2 pontos(endereços) que você passa por parametros para o Google.
Estou usando esta mesma função em um projeto meu, usando OpenCart, e resolvi postar, pois talvez alguém esteja precisando...
Espero que gostem, está tudo comentado!
;)
Código: Selecionar todos
<?php   
/* 
 *  Função de busca de Endereço pelo Google 
 *  -   Desenvolvido Julio Alves. http://gnerd.com.br 
 *  -   Utilizando WebService da API do Google. 
 */
 //COLOQUE ESTA FUNCAO EM QUALQUER PARTE DO SEU CÓDIGO, SEJA EM ALGUMA VIEW, MODEL.  
//VALE RESSALTAR QUE OS DADOS PASSADOS DEVEM SER BEM DEFINIDOS COMO NO EXEMPLO: Av. Rio Branco, 62, Fortaleza-CE. Brasil.
//PARA QUE O GOOGLE SEJA O MAIS DETALHISTA O POSSIVEL COM RELAÇÃO AO DADOS PASSADOS.
function buscarEndereco($origem, $destino){

   //FAZENDO REQUISIÇÃO A API DO GOOGLE PARA PASSANDO COMO PARAMETRO: ORIGEM E DESTINO.
   //Os parametros obrigatorios são: origins, destinations e sensor.
    //caso queira saber mais sobre os parametros consulta a API do Google.
   $resultado = simplexml_load_file('http://maps.googleapis.com/maps/api/distancematrix/xml?origins='.$origem.'&destinations='.$destino.'&language=pt-BR&sensor=false');  
    if($resultado == 'OK'){        
      echo $resultado->origin_address . '<br>';
      echo $resultado->destination_address . '<br>';
      echo $resultado->row->element->distance->text . '<br>';
      echo $resultado->row->element->duration->text . '<br>';

      //PEGO OS VALORES DE DISTANCIA VINDOS DO GOOGLE E BASEANDO-SE POR ELES FAÇO OS CÁLCULOS PARA FRETE
      $distanciaValue = $resultado->row->element->distance->value;
      $duracaoValue = $resultado->row->element->duration->value;

      //PREÇO FIXO DO FRETE
      $cost = 5.00;

      //Calculo o frete baseado na distância que eu vou ter que percorrer
      //CASO A DISTANCIA SEJA MAIOR QUE 500m E MENOR QUE 5000m O VALOR DO FRETE MUDA $cost = 7.00 e asim por diante...
      if($distanciaValue >= 500 AND $distanciaValue <= 5000)$cost = 7.00;
      elseif($distanciaValue >= 5001 AND $distanciaValue <= 15000)$cost = 15.00;
      elseif($distanciaValue > 15000)$cost = 15.00;
    }else{
      //Aqui tratamos os possiveis erros que podem acontecer, provenientes do Google Maps.
      switch($resultado){
          case 'INVALID_REQUEST': $alert = 'Solicitação Fornecida Inválida!';break;
          case 'MAX_ELEMENTS_EXCEEDED': $alert = 'O produto(*) das origens e destinos excede o limite!';break;
          case 'OVER_QUERY_LIMIT': $alert = 'O serviço recebeu muitas solicitações!';break;
          case 'REQUEST_DENIED': $alert = 'Serviço Negado!';break;
          case 'UNKNOWN_ERROR': $alert = 'Erro do servidor, Atualize sua página pressionando F5.';break;
          case 'NOT_FOUND': $alert = 'Origem e destino não puderam ser geocodificados. Verifique os locais!';break;
          case 'ZERO_RESULTS': $alert = 'Não foi possivel encontrar nenhum trajeto!';break;
      }
    }
}  
buscarEndereco("Rua José Antonio, 9, Planalto Pici, Fortaleza-CE", "Rua Barão de Sturdat, Aldeota, Fortaleza-CE");  
?>  

Re: Funcao Calcula distância entre Endereços OpenCart]

Enviado: 08 Mai 2012, 22:42
por Manoel Vidal
Parabéns pela ótima contribuição! :D

Re: Função para calcular a distância entre endereços com Goo

Enviado: 09 Mai 2012, 00:46
por Editadoo
Obrigado Manoel e eu espero que ajude!
^^ ;DD

Re: [DICA] Calcular a distância entre endereços com Google M

Enviado: 12 Mai 2012, 10:18
por denisgomes
Não querendo desmerecer a excelente colaboração, mas gostaria de complementar que existe um módulo para o OpenCart para cálculo de frete com base no CEP e no peso. Ele pode ser usado para calcular o frete manualmente para transportadoras ou para definir valores de entrega de acordo com as regiões da cidade. Claro que não é nada automático como o módulo acima, mas também não é totalmente manual já que esse módulo pode ser configurado pelo administrador.

Re: [DICA] Calcular a distância entre endereços com Google Maps

Enviado: 07 Nov 2017, 17:45
por saragosantonn
Cálculo da distância entre as cidades do Brasil - http://mapszoom.com/distancia/

este serviço irá ajudá-lo a descobrir a distância exata entre as cidades do planeta como na estrada

Re: [DICA] Calcular a distância entre endereços com Google Maps

Enviado: 21 Fev 2018, 23:05
por jpdesigner
Uso OpenCart 3.0.2.0, onde eu digito esse código?? Tentei tutoriais para criar minha própria extensão mas são todos do OpenCart 2 :(

Re: [DICA] Calcular a distância entre endereços com Google Maps

Enviado: 07 Mar 2018, 02:07
por jpdesigner
Consegui solucionar e de quebra criei uma extensão só para esse cálculo de frete por distância no OpenCart 3. A colaboração do nosso amigo "Editadoo" com a parte do cálculo em si também foi de grande ajuda. Nas próximas horas criarei um tópico explicando tudo. :D :D :D

Re: [DICA] Calcular a distância entre endereços com Google Maps

Enviado: 21 Mar 2018, 00:56
por wesleybarce
jpdesigner,

Onde encontro o módulo que construiu ? Estou precisando para uma loja 2.3.0.2.

Obrigado

Re: [DICA] Calcular a distância entre endereços com Google Maps

Enviado: 21 Mar 2018, 02:12
por jpdesigner
Olá, Wesley, meu OpenCart é o 3.0, e por falta de tempo não consegui criar o tópico explicando. Creio que não serve para o OpenCart 2, pois os arquivos são diferentes. Basicamente eu copiei os arquivos de um dos tipos de frete, renomeei e adicionei meu código, acredito que o processo seja parecido, com diferença nos demais códigos. Eu precisei criar um campo personalizado (custom field) no formulário de cadastro solicitando o número da residência, para calcular melhor a distância. Essa semana ainda tentarei divulgar o tutorial do OpenCart 3, talvez ajude mesmo sendo outra versão.

Re: [DICA] Calcular a distância entre endereços com Google Maps

Enviado: 21 Mar 2018, 10:36
por wesleybarce
Entendi, vai ajudar sim designer. Vou ficar aguardando, muito obrigado desde já.