计算两点经纬度的距离

来源:互联网 发布:蚌埠市人社局新域名 编辑:程序博客网 时间:2024/05/17 02:28

mysql 函数

DROP FUNCTION IF EXISTS func_calcDistance;CREATE FUNCTION func_calcDistance(    origLng DECIMAL(20,6),    origLat DECIMAL(20,6),    longitude DECIMAL(20,6),    latitude DECIMAL(20,6))RETURNS DOUBLEBEGIN    DECLARE result DOUBLE DEFAULT 0;    SET result = round(6378.138*2*asin(    sqrt(pow(sin((origLat*pi()/180-latitude*pi()/180)/2),2)+    cos(origLat*pi()/180)*cos(latitude*pi()/180)*pow(sin((origLng*pi()/180-longitude*pi()/180)/2),2)))*1000);    RETURN result;END;

IN RUBY MIGRATION

  ActiveRecord::Base.connection.execute <<-SQL      DROP FUNCTION IF EXISTS func_calcDistance;        CREATE FUNCTION func_calcDistance(            origLng DECIMAL(20,6),            origLat DECIMAL(20,6),            longitude DECIMAL(20,6),            latitude DECIMAL(20,6)        )        RETURNS DOUBLE        BEGIN            DECLARE result DOUBLE DEFAULT 0;            SET result = round(6378.138*2*asin(            sqrt(pow(sin((origLat*pi()/180-latitude*pi()/180)/2),2)+cos(origLat*pi()/180)*cos(latitude*pi()/180)*pow(sin((origLng*pi()/180-longitude*pi()/180)/2),2)))*1000);            RETURN result;        END  SQL  LastestDeviceLocation.select("func_calcDistance() as distance").order("distance")