sql 数据库计算经纬度

原创 2015年07月10日 18:16:13

1.也是从网络上找的方法辣
实质就是在 数据库 创建一个函数,供调用啦

CREATE FUNCTION [dbo].[fnGetDistance]
 --LatBegin 开始经度
 --LngBegin 开始维度
(@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) 

 RETURNS FLOAT 

 AS  --距离(千米)

 BEGIN              

 DECLARE  @Distance      REAL 
 DECLARE  @EARTH_RADIUS  REAL 

 SET @EARTH_RADIUS = 6378.137 

 DECLARE 

 @RadLatBegin REAL,@RadLatEnd REAL,@RadLatDiff REAL,@RadLngDiff REAL 

--在这里判断  如果数据有问题的话   就直接返回出去
 IF  @LatBegin = 0 OR @LngBegin =0 OR  @LatEnd= 0 OR @LngEnd = 0

    BEGIN
    SET @Distance = 10000

    END

--没有问题就继续 计算
 ELSE

     BEGIN

 SET @RadLatBegin = @LatBegin *PI()/180.0 
 SET @RadLatEnd = @LatEnd *PI()/180.0
 SET @RadLatDiff = @RadLatBegin - @RadLatEnd 
 SET @RadLngDiff = @LngBegin *PI()/180.0 - @LngEnd *PI()/180.0 
 SET @Distance = 2 *ASIN(
         SQRT( 
            POWER(SIN(@RadLatDiff/2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2), 2)
              )
          ) 
 SET @Distance = @Distance * @EARTH_RADIUS 
 SET @Distance = Round(@Distance * 1000, 3) / 1000

     END

 RETURN @Distance 

END

在网络上看到的那个方法,没有做输入数据的判断,因为有时可能会传入0,或者是 null 这样的参数, 但是万一传入了,我试了下。还是会有输出值的,所以就稍微判断了一下
当输入的是 0 的时候 就直接给他 返回 10000 就好啦。

调用方法
` SELECT ID,CompanyName,CompanyAdress,CompanyContact,Latitude,Longitude,Phone,CompanyDescribe,CompanyShort,OfficePhone , ROUND(dbo.fnGetDistance(

#{Longitude},#{Latitude},tb_FirmInfo.Longitude,tb_FirmInfo.Latitude

),2) as Distance FROM tb_FirmInfo
WHERE CompanyType = 3`

传入的是 精度,纬度, 精度,纬度 进行计算出来的一个值,
然后我又在外面 round 取了一下精度 ,小数点后2位,
这个函数算出来的是千米单位。

2. 再就是写代码的方法了。 有时候也会用到 在计算经纬度这里。

public static final double Range = 3.0;//地球半径

    private static final double EARTH_RADIUS = 6378.137;//地球半径

    private static double rad(double d)
    {
       return d * Math.PI / 180.0;
    }


    //计算用户和出租司机距离
//  double  dis = CommonUtil.GetDistance(Double.valueOf(latitude), Double.valueOf(longitude), 
//                                       Double.valueOf( resultMap.get(i).get("latitude").toString()),
//                                       Double.valueOf( resultMap.get(i).get("longitude").toString()));

    public static  double  GetDistance(double lat1, double lng1, double lat2,
            double lng2){
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
        Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 10000) / 10000;
//         convert.ToInt32(s);这个是 是四舍五入
        return s;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

SQL Server 中 存储“经纬度”应设置的数据类型

正如我们知道的: 【范围】 经度:西经180~东经180 纬度:北纬90 ~ 南纬90 【格式】 经度:123.456789 纬度:12.345678 此数据类型均需要保存到小数点后...
  • LIUHUAN0520
  • LIUHUAN0520
  • 2016年05月13日 19:42
  • 5566

21分钟 MySQL 入门教程

目录 一、MySQL的相关概念介绍二、Windows下MySQL的配置 配置步骤MySQL服务的启动、停止与卸载 三、MySQL脚本的基本组成四、MySQL中的数据类型五、使用MyS...
  • qq_29663071
  • qq_29663071
  • 2016年10月27日 14:07
  • 123

sql语句查询经纬度范围

指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据。  经度:113.914619  纬度:22.50128  范围:2km  longitude为数据表经度字段 ...
  • linlzk
  • linlzk
  • 2015年12月07日 10:01
  • 1265

SQL数据库——计算列

一般在写SQL的时候应该避免在条件中使用函数,因为这样就不能有效的使用索引,从而无法生成高效的执行计划。 SQL Server提供了计算列可以帮助我们解决这个问题。 由于存储计算列需要额外...
  • Shiyaru1314
  • Shiyaru1314
  • 2015年05月26日 11:47
  • 3080

根据经纬度计算两点之间的距离的公式推导过程以及google.maps的测距函数

网上有很多关于谷歌地图计算两点距离函数的代码,却没有人解释这个算法由何依据而得,这是因为我要做毕业设计,刚好又是在高考期间,所以通过计算这道数学题来打赢这场仗吧。希望可以给后来人一点帮助。...
  • xiejm2333
  • xiejm2333
  • 2017年06月15日 18:28
  • 2991

地理空间距离计算及优化(根据两个点经纬度计算距离)

1.地理空间距离计算面临的挑战 打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是“离我最近”或者“智能排序”(如下图所示)。 不管是“离我最近”还是“智能排序”,都涉及到计算用户位...
  • u011001084
  • u011001084
  • 2016年10月31日 11:13
  • 4400

利用JS实现的根据经纬度计算地球上两点之间的距离

最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下。 计算地球表面两点间的距离大概有两种办法。 第一种是默认地球是一个光滑的球面,然后计算任意两点间的距离,这个距离叫做大圆距...
  • bbsyi
  • bbsyi
  • 2016年03月01日 15:30
  • 579

arcgis 计算经纬度的面积

原文地址:经纬度坐标的shape面层计算面积的详细步骤作者:南北极GIS (1)运行ArcGis/ArcToolsBox,选择Projections/Define ProjectionW...
  • lz576825608
  • lz576825608
  • 2014年04月11日 11:31
  • 1238

如何通过经纬度粗略计算地球两点之间的距离?直接上代码

我们通过两点之间的经纬度,可以知道两点之间大致的夹角是多少度(相对地心来说)。这个可以通过勾股定理大致求得,当然这样求出来的角度不是很准,但足够用了。 可以通过下列式子计算两点之间的夹角。x1,y1为...
  • sinat_23079759
  • sinat_23079759
  • 2016年09月21日 14:21
  • 2349

获取指定经纬度及当前位置经纬度,并计算两个位置之间的距离

利用百度地图api和geolocation获取浏览器地理位置并计算位置距离 1、通过百度地图api获取浏览器经纬度 引入百度地图api(需申请获取ak) 引入文件申请获取"> js部分 ...
  • sinat_35861664
  • sinat_35861664
  • 2016年11月11日 16:17
  • 1344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql 数据库计算经纬度
举报原因:
原因补充:

(最多只允许输入30个字)