oracle得到任意2个经纬度之间的距离
在开发android lbs定位的时候,得到一个点(经纬度),业务要求要得到附近一公里的商家,这些商家都在本地库中,并且还标有经度和纬度,那就是要得到这个点和数据库中的经度和纬度的距离,距离小于1公里的就检索出来;
先写2个函数:
1.获得弧度的函数。
CREATE OR REPLACE FUNCTION RAD(d number) RETURN NUMBERisPI number :=3.141592625;begin return d* PI/180.0;end ;select RAD(360) from dual;
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;
select GetDistance('121.506656','31.245087','121.508883','31.243481') from dual;结果是:0.2649千米