#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;
}
//当计算两点间距离时,经纬度差小于下面的门限值用地球半径,大于下面门限时用大圆算
#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;
}