oracle得到任意2個經緯度之間的距離

在開發android lbs定位的時候,得到一個點oracle得到任意2個經緯度之間的距離(經緯度),業務要求要得到附近一公里的商家,這些商家都在本地庫中,並且還標有經度和緯度,那就是要得到這個點和數據庫中的經度和緯度的距離,距離小於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千米

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章