知道两点经纬度算距离

#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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值