- 08 Mai 2012, 17:38
#21359
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!
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");
?>