人本善良

导航

怎么计算两个经纬度之间的距离.

1.
用经纬度大致计算距离

地球赤道上环绕地球一周走一圈共 40075.04公里
而一圈分成360°
而每1°(度)有60'
每一度一秒在赤道上的长度计算如下:
40075.04km/360°=111.31955km
111.31955km/60'=1.8553258km=1855.3m
而每一分又有60秒
每一秒就代表 1855.3m/60=30.92m
任意两点距离计算公式为
d=111.12cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB-λA)]}
其中:A点经度,纬度分别为λA和ΦA
      B点的经度、纬度分别为λB和ΦB,d为距离

地球上所有地方的纬度一分的距离都是约等于1.86公里,也就是一度等于1.86*60=111公里。
不同纬度处的经度线上的一分的实际长度是不同的,219国道基本在东经29-38度之间,29度处的一分经线长约1.63公里,38度处的一分经线长约1.47公里。
 
 
2.

    /// <summary>     /// 获取两个经纬度之间的距离     /// </summary>     /// <param name="LonA">经度A</param>     /// <param name="LatA">纬度A</param>     /// <param name="LonB">经度B</param>     /// <param name="LatB">经度B</param>     /// <returns>距离(千米)</returns>     public static double getDistance(double LonA, double LatA, double LonB, double LatB)     {         // 东西经,南北纬处理,只在国内可以不处理(假设都是北半球,南半球只有澳洲具有应用意义)         double MLonA = LonA;         double MLatA = LatA;         double MLonB = LonB;         double MLatB = LatB;         // 地球半径(千米)         double R = 6371.004;         double C = Math.Sin(rad(LatA)) * Math.Sin(rad(LatB)) + Math.Cos(rad(LatA)) * Math.Cos(rad(LatB)) * Math.Cos(rad(MLonA - MLonB));         return (R * Math.Acos(C));     }

    private static double rad(double d)     {         return d * Math.PI / 180.0;     }

 

posted on 2015-03-10 14:00  简简单单2018  阅读(10923)  评论(0编辑  收藏  举报