Loading...

通过经纬度计算距离的公式

2009-02-13 11:14:40 发表于电子技术 本文链接: 通过经纬度计算距离的公式

在去年cosbeta曾经发布了一个网页计算工具,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离。经纬度到距离的计算在通信工程中应用比较广泛,所以cosbeta通过搜索找到了一个js的计算脚本(其实是google map的计算脚本,应该算是比较准确了),做成了这个经纬度算距离的工具

今天有人给cosbeta发邮件,询问计算的公式是什么样的。其实,若是把地球当作一个正常的球体(其实它是椭球)来说,球面两点之间的距离计算并不复杂,运用球坐标很容易就能计算出两点之间的弧长。当然这都是高中的知识,我和你一样,也没有那个耐心来将其推导,所以我就利用google map的经纬度到距离计算的js脚本,将球面弧长的公式给还原出来(估计这个公式是经过部分修正的),还原出来的公式如下:

对上面的公式解释如下:

公式中经纬度均用弧度表示,角度到弧度的转化应该是很简单的了吧,若不会,依然请参考这个这个经纬度算距离的工具

Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;

a=Lat1 – Lat2 为两点纬度之差  b=Lung1 -Lung2 为两点经度之差;

6378.137为地球半径,单位为公里;

计算出来的结果单位为公里;

哪位朋友若发现公式错误,请一定要留言指正哦!

标签:
发表于 2009-02-13 11:14:40 目录:电子技术 [RSS 2.0] 你可以发表评论, 或者从您的网站 trackback
  • 相关阅读
  • homezz 美国专业主机商
    feed url
    上一篇: « 209-02-12域名推荐
    下一篇: 2009-02-13推荐域名 »
    已经有16位大师动手指导 拒绝低俗
    • 1楼 我就是那个询问者 在2009.02.16 10:16发表评论如下: 回复

      万分感谢,我不懂代码,能不能在把那个角度转弧度的公式附加上面。谢谢

      • 1楼附属品 dingding 在2009.02.24 23:05发表评论如下: 回复

        lat1(弧度)=lat1(纬度)*pi/180
        诸如此类

      • 2楼 我就是那个询问者 在2009.02.16 10:17发表评论如下: 回复

        我就是那个询问者,感谢阿~~

        • 3楼 抽筋儿 在2009.02.26 09:39发表评论如下: 回复

          收下了,速拿matlab编个程~

          • 4楼 leo 在2009.03.02 20:36发表评论如下: 回复

            你好,看到你这样东西,我非常感兴趣,我想问一个问题,怎样能够实现输入经纬度后,自动计算出与已知三点(经纬度已知)之间的距离以及方位(即此点与已知三点之间的角度),谢谢!

            • 5楼 wader 在2009.03.18 10:35发表评论如下: 回复

              我记得我在物流课本上学到的公式与楼主现在给的公式在外围系数上有差别。。。。具体我没记住~~~但肯定不是2*6378.138

            • 6楼 物流 在2009.03.24 10:12发表评论如下: 回复

              请利用上述的公式计算两点之间的距离A(-87.65,41.85) B(-71.06,42.36).括号中的数值均为经度和纬度。然后再利用网上以编好的程序计算。二者有相当大的差别。要不你试试看。

              • 7楼 孤单的我 在2009.08.27 17:56发表评论如下: 回复

                我借用你的公式验证了了一下,与真实值不符

                • 8楼 Kylinworks 在2009.08.29 00:46发表评论如下: 回复

                  公式是对的,网上算的也对。算错的同志应该和我开始一样,少看了楼主一句话,公式里面的精度纬度要先转换成弧度的。

                  • 9楼 tiger99 在2009.12.09 22:38发表评论如下: 回复

                    上述有误,应修改为:a=Lng1 -Lng2为两点纬度之差 b=Lat1–Lat2 为两点经度之差;
                    public double DistanceOfTwoPoints(double lat1, double lng1, double lat2, double lng2)
                    {
                    double radLng1 = lng1 * Math.PI / 180.0;
                    double radLng2 = lng2 * Math.PI / 180.0;
                    double a = radLng1 – radLng2;
                    double b = (lat1-lat2) * Math.PI / 180.0;
                    double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2), 2) +
                    Math.Cos(radLng1) * Math.Cos(radLng2) * Math.Pow(Math.Sin(b/2), 2)))* 6378.137;
                    s =Math.Round(s * 10000) / 10000;
                    return s;
                    }
                    程序经验证正确通过!

                    • 9楼附属品 负笈子 在2010.04.20 15:21发表评论如下: 回复

                      里面的a成了经度之差;而b成了纬度之差。公式内容没有变化。我想可能是9楼作者弄错了/。

                    • 10楼 Infinity » Google Earth 路径距离计算 在2010.01.05 10:56发表评论如下: 回复

                      […] 基本的想法很简单。KML路径是一个点(经度,纬度,高度)的集合,计算任意路径的距离,只需要计算路径的点集里相邻两点的距离之和即可。问题便转化为求两点距离的问题。参考http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation-for… 完成经纬度间的距离计算公式。 […]

                      • 11楼 carrotye 在2010.12.17 16:04发表评论如下: 回复

                        请问东西经,和南北纬如何定义它的正负符号?如何约定的 ?

                        • 12楼 Apple 在2011.04.08 11:30发表评论如下: 回复

                          此公式进行实测存在问题!
                          实际不等同公司计算出来。

                          • 13楼 公式正确 在2011.12.30 11:06发表评论如下: 回复

                            公式正确。
                            公式里包括经纬度和弧度反算、开方计算、反正弦计算等。
                            请使用者看个仔细再用。别随便一试就说这不对、那不对的。需好好检查自己几个参数值弄对了没有。

                            评论分页: 1
                            (Required)
                            (Required, not published)
                            如果留言未显示无需重复留言,我将为你恢复!