sql 数据库计算经纬度
来源:互联网 发布:js input 样式 编辑:程序博客网 时间:2024/06/05 11:51
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; }
0 0
- sql 数据库计算经纬度
- 计算经纬度距离 sql
- 经纬度计算Sql语句
- sql(mysql数据库)计算经纬度之间的距离
- sql 计算两经纬度之间的距离
- 经纬度计算
- 经纬度计算
- 计算经纬度
- 经纬度计算
- 根据用户经纬度,sql计算距离并排序
- SQL SERVER 和Javascript根据地图经纬度计算距离函数
- SQL语句实现根据经纬度计算距离并排序分页
- SQL Server地理位置信息计算两点经纬度距离
- sql server 计算两个经纬度点之间的距离
- mysql计算经纬度距离并排序的sql语句
- Sql中根据经纬度计算两点的距离
- sql server 计算两个经纬度点之间的距离
- mysql计算经纬度距离并排序的sql语句
- MATLAB学习笔记(十二)
- Android中Parcelable接口用法
- Java JSON Date类型数据处理相关问题
- C++ 容器类
- ant android打包时获取版本号
- sql 数据库计算经纬度
- 使用HorizontalScrollView和ImageView编写简单的图片展示程序
- AndroidStudio生成全局变量的快捷键
- QLabel自动换行是可以解决的
- MFC创建多级目录
- [-] Auxiliary failed: Msf::OptionValidateError The following options fa
- HTML各种引(尼)号(玛)的问题
- DBeaver通用数据库工具
- Android Studio开发JNI