GPS 坐标距离计算
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 坐标距离计算的更多相关文章
- Gps坐标距离计算C#实现
园子里找到两钟实现方式,做一记录,回头再认真学习,先拿来就用吧: 1.@旋风描述的算法: 场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519, ...
- php 计算gps坐标 距离
在计算机或GPS上经纬度经常用度.分.秒和度.度.分.分.秒.秒的混合方式进行表示,度.分.秒间的进 制是60进制,度.度.分.分. 秒.秒的进制是100进制,换算时一定要注意.可以近似地认为每个纬度 ...
- C# 通过GPS坐标,计算两点之间距离
之前在网上有很多这种计算的,但是代码都不怎么全.经过多方打听查询.找到完整代码.现将代码共享给大家. 有需要者觉得有用者欢迎使用.觉得用或简单的高手,请绕. public static double ...
- 计算两个GPS坐标的距离
场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519,113.380301 GPS: 22.511962,113.380301 距离: 284. ...
- sql 坐标距离排序计算距离(转)
如果两个坐标的列是(x1,y1).(x2,y2),那么他们之间的距离:SQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)) sql排序 SELECT * FROM m_store ...
- 计算两个GPS坐标点的距离
计算两个GPS坐标点的距离,第一个参数是第一个点的维度,第二个参数是第一个点的经度 http://yuninglovekefan.blog.sohu.com/235655696.html /** * ...
- 计算2个GPS坐标的距离
本文转自 http://blog.csdn.net/ztp800201/article/details/44676867 Java 计算两个GPS坐标点之间的距离 1. Lat1 Lung1 表示A点 ...
- 用墨卡托和GPS坐标计算距离时误差测试
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...
- 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米
/** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...
随机推荐
- 重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame
[源码下载] 重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame 作者:webabcd 介绍重新想象 Windows 8.1 St ...
- 51Node 1364--- 最大字典序排列(树状数组)
51Node 1364--- 最大字典序排列(树状数组) 1364 最大字典序排列 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 给出一个1至N ...
- Json Utils
import java.util.List;import java.util.Map; import net.sf.json.JSONArray;import net.sf.json.JSONObje ...
- 机器学习实战 - 读书笔记(06) – SVM支持向量机
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...
- 阿里云主机上安装jdk
今天继续安装jdk到阿里云服务上,大家要看一下阿里云是32位还是64位的,如果是32位下载32位的包,如果是64位的下载64位的包 我的就是64位的,开始我还不知道是怎么区分32/64位的,原来X64 ...
- Ogre2.1 灯光与阴影
Ogre2.1大量光源渲染 Ogre2.1不是采用现在大部分引擎所用的延迟渲染,而是采用一种前向渲染的改进技术,理论基本来自于Forward+,见如下. http://www.klayge.org/? ...
- Web前端小白入门指迷
前注:这篇文章首发于我自己创办的服务于校园的技术分享 [西邮 Upper -- 004]Web前端小白入门指迷,写得很用心也就发在这里. 大前端之旅 大前端有很多种,Shell 前端,客户端前端,Ap ...
- js验证真实姓名与身份证号,手机号
最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 1.js验证真实姓名 ...
- WP修改ProgressBar的前景色
重载默认主题中的值,修改ProgressBar的前景色 做一个小项目时,用到 ProgressBar添加一个加载效果,但是背景不是白色的,调试时发现自己选的主题色与背景色相近,特别不清晰,加载效果几乎 ...
- IFeatureCursor.Flush
IFeatureCursor.Flush Method Flush any outstanding buffered writes to the database. [Visual Basic .NE ...