您的位置:首页 > 编程语言 > Java开发

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

2016-01-13 16:45 681 查看
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.
<p>    /// <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));
    }</p><p>    private static double rad(double d)
    {
        return d * Math.PI / 180.0;
    }</p>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息