Penny_Web 0 Denunciar post Postado Outubro 7, 2009 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
Matias Rezende 50 Denunciar post Postado Outubro 7, 2009 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
Tash 5 Denunciar post Postado Outubro 7, 2009 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
Penny_Web 0 Denunciar post Postado Outubro 7, 2009 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
Penny_Web 0 Denunciar post Postado Outubro 7, 2009 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
Matias Rezende 50 Denunciar post Postado Outubro 7, 2009 Os moderadores que encerram. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Edumatias 0 Denunciar post Postado Outubro 28, 2009 Colega, Como você vai fazer para pegar a latitude e longitude do CEP informado? Abraços Compartilhar este post Link para o post Compartilhar em outros sites