CREATE FUNCTION [dbo].[Rad](
@d float
)
RETURNS float
BEGIN
return @d * PI()/ 180.00;
End
CREATE FUNCTION [dbo].[DISTANCE](
@lat1 float,
@lng1 float,
@lat2 float,
@lng2 float
)
RETURNS float
BEGIN Declare @radLat1 float,@radLat2 float,
@radLon1 float,@radLon2 float,
@x1 float,@x2 float,
@y1 float,@y2 float,
@z1 float,@z2 float,
@d float,@theta float,@dist float,
@EARTH_RADIUS float = 6378.137; set @radLat1 = dbo.Rad(@lat1);
set @radLat2 = dbo.Rad(@lat2); set @radLon1=dbo.Rad(@lng1);
set @radLon2=dbo.Rad(@lng2); if @radLat1<0
set @radLat1 = PI() / 2 + ABS(@radLat1);-- south
if @radLat1>0
set @radLat1 = PI() / 2 - ABS(@radLat1);-- north if @radLon1<0
set @radLon1 = PI() * 2 - ABS(@radLon1);-- west
if @radLat2<0
set @radLat2 = PI() /2 -ABS(@radLat2);-- south if @radLat2>0
set @radLat2 = PI() / 2 - ABS(@radLat2);-- north
if @radLon2<0
set @radLon2 = PI() * 2 - ABS(@radLon2);-- west set @x1= @EARTH_RADIUS * COS(@radLon1) * SIN(@radLat1);
set @y1= @EARTH_RADIUS * SIN(@radLon1) * SIN(@radLat1);
set @z1= @EARTH_RADIUS * COS(@radLat1); set @x2= @EARTH_RADIUS * COS(@radLon2) * SIN(@radLat2);
set @y2= @EARTH_RADIUS * SIN(@radLon2) * SIN(@radLat2);
set @z2= @EARTH_RADIUS * COS(@radLat2); set @d= SQRT(
(@x1 - @x2) *
(@x1 - @x2) +
(@y1 - @y2) *
(@y1 - @y2) +
(@z1 - @z2) *
(@z1 - @z2)
);
--余弦定理求夹角
set @theta= ACOS((@EARTH_RADIUS * @EARTH_RADIUS + @EARTH_RADIUS * @EARTH_RADIUS - @d * @d) / (2 * @EARTH_RADIUS * @EARTH_RADIUS));
set @dist= @theta * @EARTH_RADIUS;
return @dist;
End

测试

select dbo.DISTANCE(113.52271, 22.263208, 113.520257, 22.245865)
     /// <summary>
/// 转化为弧度(rad)
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
     /// <summary>
/// 基于余弦定理求两经纬度距离
/// </summary>
/// <param name="lon1">第一点的经度</param>
/// <param name="lat1">第一点的纬度</param>
/// <param name="lon2">第二点的经度</param>
/// <param name="lat2">第二点的纬度</param>
/// <returns>返回的距离,单位km </returns>
public static double LantitudeLongitudeDist(double lon1, double lat1, double lon2, double lat2)
{
var EARTH_RADIUS = 6378.137;
double radLat1 = rad(lat1);
double radLat2 = rad(lat2); double radLon1 = rad(lon1);
double radLon2 = rad(lon2); if (radLat1 < )
radLat1 = Math.PI / + Math.Abs(radLat1);// south
if (radLat1 > )
radLat1 = Math.PI / - Math.Abs(radLat1);// north if (radLon1 < )
radLon1 = Math.PI * - Math.Abs(radLon1);// west
if (radLat2 < )
radLat2 = Math.PI / + Math.Abs(radLat2);// south if (radLat2 > )
radLat2 = Math.PI / - Math.Abs(radLat2);// north
if (radLon2 < )
radLon2 = Math.PI * - Math.Abs(radLon2);// west double x1 = EARTH_RADIUS * Math.Cos(radLon1) * Math.Sin(radLat1);
double y1 = EARTH_RADIUS * Math.Sin(radLon1) * Math.Sin(radLat1);
double z1 = EARTH_RADIUS * Math.Cos(radLat1); double x2 = EARTH_RADIUS * Math.Cos(radLon2) * Math.Sin(radLat2);
double y2 = EARTH_RADIUS * Math.Sin(radLon2) * Math.Sin(radLat2);
double z2 = EARTH_RADIUS * Math.Cos(radLat2); double d = Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
//余弦定理求夹角
double theta = Math.Acos((EARTH_RADIUS * EARTH_RADIUS + EARTH_RADIUS * EARTH_RADIUS - d * d) / ( * EARTH_RADIUS * EARTH_RADIUS));
double dist = theta * EARTH_RADIUS;
return dist;
}
        [TestMethod]
public void GPS()
{var s = LantitudeLongitudeDist(113.52271, 22.263208, 113.520257, 22.245865);
}

高德测距 :http://ditu.amap.com/

高德坐标:http://lbs.amap.com/console/show/picker

最新文章

  1. TestNG Study Note 1 - Eclipse 插件安装
  2. WPF GDI+ bitmap.save 一般性错误
  3. RDLC系列之一 简单示例
  4. 树形DP 2013多校8(Terrorist’s destroy HDU4679)
  5. WebRTC学习资料大全
  6. flash bulider 无法启动
  7. 最大流算法---Edmond-Karp
  8. Apache Rewrite 拟静态配置54
  9. Just4Fun - Comparaison between const and readonly in C#
  10. String.split()分割字符串
  11. ActiveMQ in Action(7) - Wildcards
  12. TP-Link路由器的设置向导
  13. dedecms文章页调用上一篇和下一篇文章
  14. [JSOI 2007]麻将
  15. dict 字典的用法
  16. FFmpeg 学习(一):FFmpeg 简介
  17. OpenCV3编程入门笔记(一)
  18. mysql 热备份
  19. linux 标准I/O (二)
  20. ServiceLoader实现原理

热门文章

  1. PHP验证邮箱地址代码
  2. MVVM(Model-View-View-Model)简单分析(及代码示例)
  3. linux下安装或升级GCC4.8,以支持C++11标准
  4. js 自带的 sort() 方法
  5. ThinkPHP去掉URL中的index.php
  6. 【Asphyre引擎】学习笔记(一)
  7. [iOS] 使用xib作为应用程序入口 with IDE
  8. Javascript-回调函数浅谈
  9. 关于使用ResultSet ---结果集没有当前行
  10. SharePoint通过stsadm备份和还原子网站(不是网站集)