oracle 以及 mysql 求经纬度之间距离的函数

来源:互联网 发布:g1x mark ii 知乎 编辑:程序博客网 时间:2024/04/28 08:36

求两个标注点 之间的距离

1、oracle 函数:

CREATE OR REPLACE FUNCTION GetDistance(lat1 number,
                                       lng1 number,
                                       lat2 number,
                                       lng2 number) RETURN NUMBER is
  earth_padius number := 6378.137;
  radLat1      number := rad(lat1);
  radLat2      number := rad(lat2);
  a            number := radLat1 - radLat2;
  b            number := rad(lng1) - rad(lng2);
  s            number := 0;
begin
  s := 2 *
       Asin(Sqrt(power(sin(a / 2), 2) +
                 cos(radLat1) * cos(radLat2) * power(sin(b / 2), 2)));
  s := s * earth_padius;
  s := round(s * 10000) / 10000;
  s := s * 1000;


  return s;
end;


2、mysql 函数

CREATE DEFINER = `root`@`%` FUNCTION `GetDistance` (
lat1 DECIMAL (10, 6),
lng1 DECIMAL (10, 6),
lat2 DECIMAL (10, 6),
lng2 DECIMAL (10, 6)
) RETURNS DECIMAL (10, 6)
BEGIN
SET @num = 2 * 6378.137 * ASIN(
SQRT(
POW(
SIN(PI() *(lat1 -(lat2)) / 360),
2
) + COS(PI() * lat1 / 180) * COS(lat2 * PI() / 180) * POW(
SIN(PI() *(lng1 -(lng2)) / 360),
2
)
)
);
RETURN @num;
END

分享了 供大家使用。

0 0
原创粉丝点击