设为首页 加入收藏

TOP

oracle得到任意2个经纬度之间的距离
2014-11-24 02:37:56 来源: 作者: 【 】 浏览:1
Tags:oracle 得到 任意 纬度 之间 距离

在开发android lbs定位的时候,得到一个点(经纬度),业务要求要得到附近一公里的商家,这些商家都在本地库中,并且还标有经度和纬度,那就是要得到这个点和数据库中的经度和纬度的距离,距离小于1公里的就检索出来;

先写2个函数:
1.获得弧度的函数。

Sql代码
CREATE OR REPLACE FUNCTION RAD(d number) RETURN NUMBER
is
PI number :=3.141592625;

begin
return d* PI/180.0;
end ;

select RAD(360) from dual;


2.根据经纬度计算距离。
Sql代码
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;
return s;

end;


根据百度拾取坐标来获得经纬度:
http://dev.baidu.com/wiki/static/map/API/tool/getPoint/

东方明珠塔的经纬度是:121.506656,31.245087
陆家嘴地铁站的经纬度是:121.508883,31.243481

得到这2点的距离,得出的距离是千米!
Sql代码
select GetDistance('121.506656','31.245087','121.508883','31.243481') from dual;

结果是:0.2649千米

作者“刘亚飞”

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sqlplus ora-12514解决 下一篇ORA-12514监听错误解决

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: