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

GPS 坐标距离计算的更多相关文章

  1. Gps坐标距离计算C#实现

    园子里找到两钟实现方式,做一记录,回头再认真学习,先拿来就用吧: 1.@旋风描述的算法: 场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519, ...

  2. php 计算gps坐标 距离

    在计算机或GPS上经纬度经常用度.分.秒和度.度.分.分.秒.秒的混合方式进行表示,度.分.秒间的进 制是60进制,度.度.分.分. 秒.秒的进制是100进制,换算时一定要注意.可以近似地认为每个纬度 ...

  3. C# 通过GPS坐标,计算两点之间距离

    之前在网上有很多这种计算的,但是代码都不怎么全.经过多方打听查询.找到完整代码.现将代码共享给大家. 有需要者觉得有用者欢迎使用.觉得用或简单的高手,请绕. public static double ...

  4. 计算两个GPS坐标的距离

    场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519,113.380301 GPS: 22.511962,113.380301 距离: 284. ...

  5. sql 坐标距离排序计算距离(转)

    如果两个坐标的列是(x1,y1).(x2,y2),那么他们之间的距离:SQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)) sql排序 SELECT * FROM m_store ...

  6. 计算两个GPS坐标点的距离

    计算两个GPS坐标点的距离,第一个参数是第一个点的维度,第二个参数是第一个点的经度 http://yuninglovekefan.blog.sohu.com/235655696.html /** * ...

  7. 计算2个GPS坐标的距离

    本文转自 http://blog.csdn.net/ztp800201/article/details/44676867 Java 计算两个GPS坐标点之间的距离 1. Lat1 Lung1 表示A点 ...

  8. 用墨卡托和GPS坐标计算距离时误差测试

    iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...

  9. 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米

    /** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...

随机推荐

  1. .Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点

    除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果. 首先说下.Net配置文件中一个 ...

  2. JS代码放置位置、变量与数据类型、运算符与逻辑表达运算符

    内容简要: 1.JS代码放置位置的问题: 2.变量与数据类型: 3.运算符与逻辑表达式的运算符   我的位置 全局问题:为何在网页推荐位置(一般在<head></head>内部 ...

  3. 簡單SQL存儲過程實例

    簡單SQL存儲過程實例 摘自:http://blog.csdn.net/libra6956/article/details/5589173 实例1:只返回单一记录集的存储过程. 银行存款表(bankM ...

  4. GridView 使用方法总结 (一)

    GridView 使用方法总结 (一) 下载全部代码 http://www.sufeinet.com/thread-431-1-1.html   原文件作者是:csdn.net的清清月儿 她的主页  ...

  5. 【JS复习笔记】02 对象与函数

    好吧,因为很重要的事情,几天没写笔记了. 关于对象: ||可以用来填充默认值,如:myApp.name || "无" &&可以用来避免错误,myApp.NameOb ...

  6. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

  7. 设置让ASP.NET管道接收所有类型的请求

    在web.config文件添加如下一段配置: <configuration> <system.webServer> <modules runAllManagedModul ...

  8. 六个创建模式之简单工厂模式(Simple Factory Pattern)

    定义: 定义一个工厂类,它可以根据参数的不同生成对应的类的实例:被创建的类的实例通常有相同的父类.因为该工厂方法尝尝是静态的,所以又被称为静态工厂方法(Static Factory Method) 结 ...

  9. PowerShell与CMD在路径解析上的一点不同

    对于路径含有空格的文件夹,在加入PATH环境变量时,前后往往会加上引号.这种情况,CMD可以正确识别:但是Powershell却不能加上引号,否则无法定位路径. 例如,在PS中,$env:path查看 ...

  10. SHAREPOINT 工作流审批权限问题

    继续我们上次的工作流,我们发现所有人都有审批权限,这和我们正常的逻辑相反,正常应该是只有审批人才有权限,其它人只能查看,如下 这样解决,同样为SpecialPermissions 绑定到新成员 > ...