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( ...
随机推荐
- 淘宝API开发系列---阿里.聚石塔.开放平台的使用
好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...
- PHP的加密解密字符串函数
程序中经常使用的PHP加密解密字符串函数 代码如下: /********************************************************************* 函数 ...
- php中的字符串常用函数(一) strpos() 子字符首次出现的位置
strpos($str, $needle); 1.返回$needle在$str首次出现的位置.(大小写敏感). 2.从php5开始$needle支持多字符.php4只能用单个字符. 3.能找到$nee ...
- 硅谷新闻8--TabLayout替换ViewPagerIndicator
1.关联库 compile 'com.android.support:design:23.3.0' 2.布局写上TabLayout <android.support.design.widget. ...
- Vue基础理论
一 vue的定位 (1)Vue.js是一个构建数据驱动的 web 界面的库. (2)Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. (3)Vue.js 自身不是一 ...
- Hadoop技术内幕(YARN)第4章问题部分答案
问题1:改写DistributedShell程序,使得每个container运行在不同节点上(目前是随机的,可能运行在任意节点上). 问题2:改写DistributedShell程序,使得某个用户指定 ...
- Struts2(十六)Json
一.JSON Json就是浏览器和服务器之间交换数据的一种轻量级对象 javaSctipt中类似的对象操作 $(function() { var person = { "name" ...
- 关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型
关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...
- 自增build ID配置
本文转载出自:http://blog.sina.com.cn/s/blog_13ec67adc0102wimg.html Build在plist文件中的key是“CFBundleVersion”, ...
- Cocos2d-X-3.0之后的版本的环境搭建
由于cocos2d游戏开发引擎更新十分频繁,官方文档同步不够及时和完善.所以不要照着官方文档来照做生成工程. <点击图片就能进入网站> 具体的步骤: 1.获取cocos2d-X的源码v3. ...