通过两点间的经纬度求两点间的地表距离

const double EarthRadiusKm = 6371.012;//地球半径   单位 :千米 
const double PI = 3.141592654;//PI的值 

/*通过两点间的经纬度求两点间的地表距离 */
float GetDistance(float Alongitude, float Alatitude, float Blongitude, float Blatitude)
{           
           //先转化为弧度制
            float dx = Alongitude * PI / 180;
            float dy = Alatitude * PI / 180;
            float da = Blongitude * PI / 180;
            float db = Blatitude * PI / 180;
                        
            double dDistance = EarthRadiusKm*(acos(cos(db)*cos(dy)*cos(da-dx)+sin(db)*sin(dy)));
           
           /*这个公式就是使用这个公式来进行计算的*/

            return dDistance;
}


计算地球上两经纬度点A B间距离

 

在GIS应用中,计算两点之间距离的公式非常重要,这里仅列出几种计算方法。

假设地球是一个标准球体,半径为R,并且假设东经为正,西经为负,北纬为正,南纬为负,

则 A(x,y)的坐标可表示为(R*cosy*cosx,R*cosy*sinx,R*siny) B(a,b)可表示为(R*cosb*cosa,R*cosb*sina,R*sinb)

于是,AB对于球心所张的角的余弦大小为
cosb*cosy*(cosa*cosx+sina*sinx)+sinb*siny

=cosb*cosy*cos(a-x)+sinb*siny
因此AB两点的球面距离为
R*{arccos[cosb*cosy*cos(a-x)+sinb*siny]}

注意几点:

1.      x,y,a,b都是角度,最后结果中给出的arccos因为弧度形式;

2.      所谓的“东经为正,西经为负,北纬为正,南纬为负”是为了计算的方便。比如某点为西经145°,南纬36°,那么计算时可用(-145°,-36°);

3.      AB对球心所张角的球法实际上是求两向量的夹角K。用公式*=|OA|*|OB|*cosK可以得到;

4.      还有对相同点进行处理等。

 

参考资料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为距离。



你可能感兴趣的:(通过两点间的经纬度求两点间的地表距离)