oracle。距离,oracle 经纬 距离

场景:oracle失去任意2个经纬度之间的距离

oracle得到任意2个经纬度之间的距离

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

先写2个函数:

1.获得弧度的函数。

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.根据经纬度计算距离。

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点的距离,得出的距离是千米!

select GetDistance('121.506656','31.245087','121.508883','31.243481') from dual;

结果是:0.2649千米

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值