根据两点经纬度计算距离

这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的
假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈
就叫作“赤道”。在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”;构成这些圆圈的线段,
叫做纬线。我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬。
北极就是北纬90度,南极就是南纬90度。纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,
两极和高纬度地区无夏,中纬度地区四季分明。
其次,从北极点到南极点,可以画出许多南北方向的与地球赤道垂直的大圆圈,这叫作“经圈”;构成这
些圆圈的线段,就叫经线。公元1884平面坐标图年,国际上规定以通过英国伦敦近郊的格林尼治天文台的
经线作为计算经度的起点,即经度零度零分零秒,也称“本初子午线”。在它东面的为东经,共180度;
在它西面的为西经,共180度。因为地球是圆的,所以东经180度和西经180度的经线是同一条经线。各国
公定180度经线为“国际日期变更线”。为了避免同一地区使用两个不同的日期,国际日期变线在遇陆地时
略有偏离。 每一经度和纬度还可以再细分为60分,每一分再分为60秒以及秒的小数。利用经纬线,我们就可以确定
地球上每一个地方的具体位置,并且把它在地图或地球仪上表示出来。例如问北京的经纬度是多少?我们
很容易从地图上查出来是东经116度24分,北纬39度54分。在大海中航行的船只,只要把所在地的经度测
出来,就可以确定船在海洋中的位置和前进方向。 纬度共有90度。赤道为0度,向两极排列,圈子越小,
度数越大。
横线是纬度,竖线是经度。
当然可以计算,四元二次方程。
经度和纬度都是一种角度。经度是个两面角,是两个经线平面的夹角。因所有经线都是一样长,为了度量
经度选取一个起点面,经1884年国际会议协商,决定以通过英国伦敦近郊、泰晤士河南岸的格林尼治皇家
天文台(旧址)的一台主要子午仪十字丝的那条经线为起始经线,称为本初子午线。本初子午线平面是起
点面,终点面是本地经线平面。某一点的经度,就是该点所在的经线平面与本初子午线平面间的夹角。在
赤道上度量,自本初子午线平面作为起点面,分别往东往西度量,往东量值称为东经度,往西量值称为西
经度。由此可见,一地的经度是该地对于本初子午线的方向和角距离。本初子午线是0°经度,东经度的最
大值为180°,西经度的最大值为180°,东、西经180°经线是同一根经线,因此不分东经或西经,而统称
180°经线。 纬度是个线面角。起点面是赤道平面,线是本地的地面法线。所谓法线,即垂直于参考扁球体表面的线。
某地的纬度就是该地的法线与赤道平面之间的夹角。纬度在本地经线上度量,由赤道向南、北度量,向北
量值称为北纬度,向南量值称为南纬度。由此可见,一地的纬度是该地对于赤道的方向和角距离。赤道是
0°纬线,北纬度的最大值为90°,即北极点;南纬度的最大值为90°,即南极点。

经纬度互换

度(DDD):E 108.90593度    N 34.21630度

如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348再取整数位21(秒),故转化为108度54分21秒.

同样将度分秒(DMS):东经E 108度54分22.2秒 换算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度

因为计算时小数位保留的原因,导致正反计算存在一定误差,但误差影响不是很大。1秒的误差就是几米的样子。GPS车友可以用上述方法换算成自己需要的单位坐标。

经纬度换算成米

纬度分为60分,每一分再分为60秒以及秒的小数。

纬度线投射在图上看似水平的平行线,但实际上是不同半径的圆。有相同特定纬度的所有位置都在同一个纬线上。 
赤道的纬度为0°,将行星平分为南半球和北半球。 
纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。
纬度数值在0至30度之间的地区称为低纬地区,纬度数值在30至60度之间的地区称为中纬地区,纬度数值在60至90度之间的地区称为高纬地区。
赤道、南回归线、北回归线、南极圈和北极圈是特殊的纬线。
纬度1秒的长度
地球的子午线总长度大约40008km。平均:
纬度1度 = 大约111km 
纬度1分 = 大约1.85km 
纬度1秒 = 大约30.9m

根据地球上任意两点的经纬度计算两点间的距离

地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:

C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)

Distance = R*Arccos(C)*Pi/180

这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile

如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:

C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)

Distance = R*Arccos(C)*Pi/180

以上通过简单的三角变换就可以推出。

如果三角函数的输入和输出都采用弧度值,那么公式还可以写作:

C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)

Distance = R*Arccos(C)*Pi/180

也就是:

C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)

Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile

在实际应用当中,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然 后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所 计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。
附:C#代码:

private const double EARTH_RADIUS = 6378.137;//地球半径
private static double rad(double d)
{
   return d * Math.PI / 180.0;
}

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;
   return s;
}

分类: ASP.NET, 软件开发
好文要顶 关注我 收藏该文  

whh
关注 - 0
粉丝 - 32

+加关注

15
0
(请您对文章做出评价)

« 上一篇:导出Excel要修改的配置文件
» 下一篇:OWC--初体验

posted on 2010-12-20 11:58 whh 阅读(160571) 评论(12) 编辑 收藏

评论:

#1楼 2011-12-23 12:06 | sunnyku

听说你去美国了,Merry Christmas!
支持(0)反对(0)

#2楼 2011-12-24 23:39 | Ju2ender

好文要顶!:D
支持(0)反对(0)

#3楼 2012-03-20 11:45 | HoYO

不错 收藏了
支持(0)反对(0)

#4楼 2012-03-23 16:35 | 痞子过

很不错的文章。
支持(0)反对(0)

#5楼 2012-08-28 18:12 | dying318

前面说的倒挺详细的,怎么最后的C#里面的公式就变了。
前面是Distance = R*Arccos(C)*Pi/180,C的推导我也知道,但是最后的代码里面就看不懂了,
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)));
怎么又变成Asin了?
支持(0)反对(0)

#6楼 2013-02-04 00:59 | 像阳关一样明媚的女生

是我看过的最详细,最准确的了。。
支持(0)反对(0)

#7楼 2013-04-28 10:26 | 柳轩涤俗

相当牛!
支持(0)反对(0)

#8楼 2013-05-10 13:28 | 阿彬

写的很不错,拜读了
支持(0)反对(0)

#9楼 2013-12-09 12:41 | jucai

6715.000000
使用上面的代码,我每次都得到这个值。why?
支持(0)反对(0)

#10楼 2014-06-26 11:32 | @索卡

如果加上海拔高度怎么计算呢?
支持(0)反对(0)

#11楼 2014-09-30 17:14 | hety

这是什么语言?是Java么?
支持(0)反对(0)

#12楼 2015-01-12 14:14 | weblogical

C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)
博主, 这个公式怎么来的呢?谢谢

根据两点经纬度计算距离相关推荐

  1. 已知两点经纬度 计算距离和方位角(MATLAB实现)

    本文将参考文件:http://www.movable-type.co.uk/scripts/latlong-vincenty.html 当中的计算公式和java代码用MATLAB语言实现,然后进行了实 ...

  2. Java根据两点经纬度计算距离

    这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈 就叫作&qu ...

  3. 微信小程序中通过两点经纬度计算距离

    效果图 先拿到自己的经纬度 data:{// 目的地坐标latitude2: 22.490548,longitude2: 113.921921,}/*** 生命周期函数--监听页面加载*/onLoad ...

  4. EXCEL根据两点经纬度计算距离

    1. 参考:http://jingyan.baidu.com/article/48b558e34df4d47f39c09a42.html 在E2单元格输入公式=6371004*ACOS(1-(POWE ...

  5. 根据两点经纬度计算距离和角度

    1.distance /** * * @param long1 经度1 * @param lat1 维度1 * @param long2 经度2 * @param lat2 纬度2 * @return ...

  6. 根据两点经纬度计算两点距离...工具类

    /** * 根据两点经纬度计算距离 * 直接调用使用即可 * @author tarena  *  */ public class DistanceUtil {     public static f ...

  7. 根据两点间的经纬度计算距离

    /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($l ...

  8. php 经纬度两点间距离公式,PHP根据两点间的经纬度计算距离,php两点经纬度计算...

    PHP根据两点间的经纬度计算距离,php两点经纬度计算 这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $l ...

  9. mysql lbs 计算距离_使用mysql的lbs根据经纬度计算距离

    精算经纬度(qx,qy)点附近的停车场,根据表现有的经纬度计算:sql如下 select test, round( 6378.138 * 2 * asin( sqrt( pow( sin( (#{qy ...

最新文章

  1. Android中关于SQLite数据库的一些知识
  2. 【转载】中文输入法下onKeyPress不能触发的问题
  3. docker 镜像修改的配置文件自动还原_Docker 基础与实战,看这一篇就够了
  4. 关于Java栈与堆的思考
  5. 添加web引用和添加服务引用有什么区别?
  6. android的单选按钮xml语法,android-通过数组而不是xml布局中的单独字符串设置单选按钮组中单选按钮的文本...
  7. 将 Win32 程序移植到 Linux
  8. php字符串分割汉字,php支持中文字符串分割的函数
  9. Nginx+Php-fpm运行原理详解
  10. 深入理解Java中四种创建对象的方式
  11. 使用LINQ to SQL更新数据库(中):几种解决方案
  12. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 计算机的性能指标、机器字长
  13. 整车EMC正向开发及仿真
  14. qqxml代码-班级作业xml卡片代码班级作业
  15. 阿里 vs. 腾讯,谁的收购更有眼光?
  16. web前端常见浏览器兼容性问题以及解决技巧
  17. node之cookie-parser
  18. 信息内容安全-《人民的名义》人物图谱分析实验
  19. 微信开发者工具无法选择预览和真机调试_小程序开发 第二篇:使用微信小程序开发者工具、wepy框架初始化项目...
  20. linux-应用-压缩与解压小结

热门文章

  1. 移动开发者必须了解的55个APP运营推广工具!
  2. 面试题---可乐题:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
  3. H5缓存机制浅析-移动端Web加载性能优化【干货】
  4. [渝粤教育] 武汉大学 法律职业伦理 参考 资料
  5. 一起做RGB-D SLAM(3)
  6. 【逻辑漏洞技巧拓展】————3、逻辑漏洞之密码重置
  7. 渠得清如许,源头活水来——2015年年终总结
  8. WQ7033开发指南汇总
  9. 关于Tomcat黄叉的解决方案
  10. 网络安全技术第六章——第三节木马的攻击与防治(中木马现象、木马病毒概念结构、木马实施攻击过程、配置传播运行连接木马、远程控制、木马伪装手段、更换图标改名换姓文件捆绑出错显示网页嫁衣自我销毁邮件附件)