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

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 22:20 点击:

 在开发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千米

作者“刘亚飞”
 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Table函数使用简介
      • Oracle数据库Constraint约束的常用操作及异常处理
      • Bulk Collect性能分析(zz)
      • export/import的使用
      • OCP043第十五讲 Database Security
      • ORACLE10gr2数据导入MySQL方案
      • oracle 让sys用户可以使用isqlplus
      • 在oracle数据库下使用iSQL*Plus DBA访问数据库
      • Oracle行列转换小结
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1