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对球心所张角的球法实际上是求
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为距离。