您的位置:首页 > 其它

知道两点经纬度算距离

2016-01-13 21:30 197 查看
#define PI 3.14159265358979323 //3.14159265353846

//当计算两点间距离时,经纬度差小于下面的门限值用地球半径,大于下面门限时用大圆算

#define TWO_P_DIS_LIMIT 0.1

double RadFactor = PI/180; //弧度与度的比例因子

double RevRadFactor = 180/PI; //度与弧度的比例因子

#define eR 6378245

double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height);

/*

参数:

BgnLongi:起始点经度

BgnLati :起始点纬度

EndLongi:终点经度

EndLati :终点纬度

Height :高程

返回值:两点间距离

*/

double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height)

{

double distance;

double a0,b0,C0;

double t2,t1 = 0,BiasE,BiasN;

BiasE = fabs(BgnLongi-EndLongi);

BiasN = fabs(BgnLati-EndLati);

//当经纬度都小于门限值时,采用两点间直线距离

if((BiasE<TWO_P_DIS_LIMIT)&&(BiasN<TWO_P_DIS_LIMIT))

{

t2=sqrt(BiasN*BiasN+BiasE*BiasE)*RadFactor;

distance=t2*(eR+Height);

}

else //当经纬度都大于门限值时,采用大圆距离

{

a0=(90-EndLati)*RadFactor;

b0=(90-BgnLati)*RadFactor;

C0=fabs(BgnLongi-EndLongi)*RadFactor;

t1 = cos(a0)*cos(b0)+sin(a0)*sin(b0)*cos(C0);

t2 = acos(t1);

distance=(eR+Height)*t2;

}

return distance;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: