Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago Lenzi

Raio de coordenadas.

Recommended Posts

Bom dia pessoal.

Tenho as coordenadas

<Latitude>-23.5477</Latitude>
<Longitude>-46.6359</Longitude>

Preciso pegar todos os outros pontos previamente registrados com suas respectivas coordenadas, dentro de um Raio de 5Km.

 

Existe alguma classe para isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, devido ao fato de todas as coordenadas estarem no BD, este foi o que melhor se enquadrou em minha aplicação.

No entanto, está retornando todos os registros.

 

Fiz a adaptação para os nomes de campos e tabela mas não funcionou.

Lembrando que os valores par Lat = 45.707809 e Long= 9.741152

SELECT *, (6371 *
        acos(
            cos(radians(-45.707809)) *
            cos(radians(Lat)) *
            cos(radians(9.741152) - radians(Longi)) +
            sin(radians(-45.707809)) *
            sin(radians(Lat))
        )) AS distance
FROM area_sosta HAVING distance <= 5

O que sugere?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops! Devido a quantidade de registros e a falta de filtros, me perdi no retorno.

Funcionou e funcionou bonito. Ganhei 4 dias no cronograma.

 

Muito obrigado, Digníssimo Beraldo. :D

 

Beraldo, devido ao fato de todas as coordenadas estarem no BD, este foi o que melhor se enquadrou em minha aplicação.

No entanto, está retornando todos os registros.

Beraldo, em 22 Mar 2016 - 2:06 PM, disse:snapback.png

Dê uma olhada aqui:

http://pt.stackoverf...=oldest#tab-top

 

 

Fiz a adaptação para os nomes de campos e tabela mas não funcionou.

Lembrando que os valores par Lat = 45.707809 e Long= 9.741152

SELECT *, (6371 *
        acos(
            cos(radians(-45.707809)) *
            cos(radians(Lat)) *
            cos(radians(9.741152) - radians(Longi)) +
            sin(radians(-45.707809)) *
            sin(radians(Lat))
        )) AS distance
FROM area_sosta HAVING distance <= 5

O que sugere?

 

Caramba, que irada essa consulta! Não sabia que o MySQL poderia ir tão longe, haha.

 

Cara, pode nos enviar alguns registros de area_sosta, para fazer testes?

 

Maykel, A DB é extensa e com minha limitação técnica, não consigo exportar parcialmente. Mas se quiser, posso montar uma especifica para você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por sergio pereira cardoso
      ola, sou novo no forum, é simples, preciso de uma rotina para mostrar o mapa e minha localizacao, obrigado, vlws ...
    • Por matheustsulee
      e ai galera blz?
      to desenvolvendo um sistema que precisa de pegar a localização do usuario e fazer um tipo de "Locais nas imediaçoes"
      alguém ai tem uma dica boa ?
       
       
      obg 
    • Por xSmoking
      Boa noite, gostaria de saber se há um jeito melhor de separar os graus dos minutos do parâmetro "ccor".
      cind = char pointer contendo a indicação de latitude(N/S) ou longitude (E/W)
      ccor = char pointer contendo a coordenado de latitude ou longitude no formato DDDMM.MMMM Se a função estiver certa, como eu posso filtrar se estou recebendo "DDDMM.MMMM" ou "DDMM.MMMM" (caso haja um 0 na frente)? Seria contando o tamanho do char* passado? float degMin2DecDeg(char *cind, char *ccor) { float degrees = 0.0; String degreeUnit; String minuteUnit; for (int i = 0; i < 3; ++i) degreeUnit += ccor[i]; for (int i = 3; i < 10; ++i) minuteUnit += ccor[i]; float minute = atof(minuteUnit.c_str()) / 60; float degree = atof(degreeUnit.c_str()); if (cind == "S" || cind == "W") degrees = (degree + minute) * -1; else degrees = (degree + minute) * 1; return(degrees); }
×

Informação importante

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