Mysql
 sql >> Database >  >> RDS >> Mysql

Una funzione MySQL personalizzata per calcolare la distanza di Haversine?

Sì, è possibile creare una funzione memorizzata per questo scopo. Qualcosa del genere:

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 ;

Non credo che offra guadagni di velocità ma va bene per tutti gli altri motivi che citi:leggibilità, riutilizzabilità, facilità di manutenzione (immagina di trovare un errore dopo 2 anni e di dover modificare il codice tra (poche) centinaia luoghi).