Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Penny_Web

[Resolvido] Somar km ou metros a latitude e longitude de um cep

Recommended Posts

Olá pessoal,

 

Estou fazendo um sisteminha de pizzaria prá minha cidade e preciso que, a partir do cep digitado pelo usuário, o sistema informe qual a pizzaria mais próxima deste cep, desde que este cep esteja dentro de 5km.

Já tenho cadastrado em base de dados todos os ceps da cidade, com suas respectivas latitudes e longitudes e estou partindo da seguinte idéia:

 

Cep digitado: 06653-040

Latidude: -23.5456687

Longitude: -46.9324927

 

Daí somaria 5 km a latitude e lontitude e subtrairia 5 km também (ou em metros, tanto faz).

A inspiração para fazer tudo isso surgiu desse tópico:

http://forum.imasters.com.br/index.php?/topic/346405-funcao-para-calcular-distancia-entre-2-pontos-atraves-da-lat-e-lon/

mas os postantes também não acharam solução.

 

O grande problema é: não tenho mais idéia de como fazer a soma e subtração na latitude e longitude. Se alguém puder dar uma luz, fico grata!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, é possível que utilizando a API do Google Maps você consiga retornar a distância entre os pontos, ou seja, a distância do ponto que o camarada está até as pizzarias que você tem cadastradas. Vale a pena dar uma olhada, até porque você pode integrar e mostrar a rota, para chegar do endereço do camarada até a pizzaria escolhida.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso te ajudar com uma coisa:

 

Tendo dois pontos, você usa a diferença de latitude e longitude e aplica pitágoras:

 

a² = b² + c²

distancia² = (latA - latB)² + (lonA - lonB)²

 

Como resultado você terá uma distância em graus, mas não lembro como converter isso pra metros. Faça uns testes e veja quantos metros aproximadamente você consegue por grau...

 

Você pode introduzir isso até mesmo em uma consulta de banco de dados:

 

SELECT * FROM ceps WHERE SQRT(POW(latitude-30) + POW(lontigude-40)) < 50

 

(onde 30 é a latitude do ponto alvo, 40 a longitude e 50 a distância desejada)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tash, consegui descobrir a distância em metros (ou km) com a função abaixo, mas aí eu preciso obrigatoriamente ter dois pontos.

 

A partir daí, eu poderia seguir a idéia do Carlos Eduardo, em pegar a distância inicial (cep digitado) até as pizzarias cadastradas. O único problema que vejo aí é a quantidade de pizzarias cadastradas (muitas e muitas), daí a consulta ficaria pesada, pois teria que passar pizzaria por pizzaria...não sei se é viável, mas já é uma luz!

 

function distanciaPontos($p1LA, $p1LO, $p2LA, $p2LO) {
   $r = 6371.0;

   $p1LA = $p1LA * pi() / 180.0;
   $p1LO = $p1LO * pi() / 180.0;
   $p2LA = $p2LA * pi() / 180.0;
   $p2LO = $p2LO * pi() / 180.0;

    $dif_latitude = $p2LA - $p1LA;
 $dif_longitude = $p2LO - $p1LO;			 

   $a = sin($dif_latitude / 2) * sin($dif_latitude / 2) + cos($p1LA) * cos($p2LA) * sin($dif_longitude / 2) * sin($dif_longitude / 2);    
	$aa=sqrt($a);
	$ab=sqrt(1 - $a);	
	$c = atan2($aa, $ab) * 2;

   $metros = round($r * $c * 1000); 			
   return $metros;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, consegui seguindo as idéias acima.

 

Peguei a latitude e longitude do cep inicial, calculei a distância entre ele e todas as pizzarias cadastradas (que afinal não eram tããão muitas e muitas) e exibi apenas as pizzarias cujas distâncias eram até 5 km (ou 5000 metros). A consulta até ficou leve, mas acredito que para um cadastro grande, precise fazer de outras maneiras.

 

Esqueci de dizer que a função para cálculo das distâncias que utilizei é de autoria de Cesar Bagatoli (http://www.cesar.inf.br/blog/?p=273), só fiz umas adaptaçõezinhas.

 

Obrigada pelas ajudas!

 

Bem, consegui seguindo as idéias acima.

 

Peguei a latitude e longitude do cep inicial, calculei a distância entre ele e todas as pizzarias cadastradas (que afinal não eram tããão muitas e muitas) e exibi apenas as pizzarias cujas distâncias eram até 5 km (ou 5000 metros). A consulta até ficou leve, mas acredito que para um cadastro grande, precise fazer de outras maneiras.

 

Esqueci de dizer que a função para cálculo das distâncias que utilizei é de autoria de Cesar Bagatoli (http://www.cesar.inf.br/blog/?p=273), só fiz umas adaptaçõezinhas.

 

Obrigada pelas ajudas!

 

(Aonde encerro o tópico?)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.