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

Uma função personalizada do MySQL para calcular a distância de Haversine?


Sim, você pode criar uma função armazenada para essa finalidade. Algo assim:
DELIMITER //
  DROP FUNCTION IF EXISTS Haversine //
  CREATE FUNCTION Haversine
    ( myLat FLOAT
    , myLong FLOAT
    , db_lat FLOAT
    , db_long FLOAT
    , unit VARCHAR(20)
    )
    RETURNS FLOAT
      DETERMINISTIC
    BEGIN
      DECLARE haver FLOAT ;

      IF unit = 'MILES'                    --- calculations
        SET haver = ...                --- calculations

      RETURN haver ;
    END  //
DELIMITER ;

Não acho que ofereça ganhos de velocidade, mas é bom por todos os outros motivos que você menciona:Legibilidade, reutilização, facilidade de manutenção (imagine que você encontre um erro após 2 anos e precise editar o código em algumas (algumas) centenas lugares).