Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione pontos do banco de dados do mapa de acordo com o raio


Às vezes, o parâmetro para ACOS() pode ser um pouco maior que 1 -- um pouco fora do domínio dessa função -- quando as distâncias são pequenas. Há uma fórmula de distância melhor disponível, devido a Vincenty. Ele usa o ATAN2(y,x) função em vez do ACOS() função e, portanto, é mais estável numericamente.

É isso.
DEGREES(
    ATAN2(
      SQRT(
        POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) +
        POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) -
             (SIN(RADIANS(lat1))*COS(RADIANS(lat2)) *
              COS(RADIANS(lon2-lon1))) ,2)),
      SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) +
      COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1))))

Esta função retorna seu resultado em graus. Existem 111,045 km em um grau. 60 milhas náuticas. 69 milhas terrestres. Portanto, multiplique o resultado por um desses números para obter a distância. Há uma descrição mais completa, incluindo uma definição de função armazenada para MySQL, aqui .

Outra solução é usar ISNULL(ACOS(formula), 0.0)